home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 6 / Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso / 025a / snp497.zip / SNAP.DOC < prev    next >
Text File  |  1991-09-09  |  179KB  |  4,938 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.                                         SNAP!
  19.                          Documentation and Development System
  20.                              for FoxPro, dBASE, Clipper,
  21.                                and Other X-Base Systems
  22.  
  23.  
  24.                        Written by Walter J. Kennamer 74025,514
  25.  
  26.  
  27.  
  28.                                 ┌─────────┐                  
  29.                           ┌─────┴───┐     │              (tm)
  30.                         ──│         │o    │──────────────────
  31.                           │   ┌─────┴╨──┐ │  Association of  
  32.                           │   │         │─┘  Shareware       
  33.                           └───│    o    │    Professionals   
  34.                         ──────│    ║    │────────────────────
  35.                               └────╨────┘    MEMBER          
  36.  
  37.  
  38.  
  39.                                        License
  40.  
  41.      Copyright (c) 1991 Walter J. Kennamer. All Rights Reserved.
  42.  
  43.      You are free to use, copy and distribute SNAP! providing that:
  44.  
  45.           NO FEE IS CHARGED FOR USE, COPYING OR DISTRIBUTION.
  46.  
  47.           IT IS NOT MODIFIED IN ANY WAY.
  48.  
  49.           THIS DOCUMENTATION FILE (UNMODIFIED) ACCOMPANIES ALL COPIES.
  50.  
  51.      This program is provided AS IS without any warranty, expressed or implied,
  52.      including but not limited to fitness for a particular purpose.
  53.  
  54.      dBASE II, dBASE III, dBASE IV are trademarks of Ashton-Tate. Clipper is a
  55.      trademark of Nantucket Software.  FoxBASE, FoxBASE+ and FoxPro are
  56.      trademarks of Fox Holdings, Inc.  UNIX is a trademark of AT&T.  Other
  57.      trademarks are the properties of their respective holders.
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.                              Table of Contents
  67.  
  68.      Overview  . . . . . . . . . . . . . . . . . . . . . . . . . .   4
  69.           X-Base Dialects  . . . . . . . . . . . . . . . . . . . .   5
  70.           Registration Fee . . . . . . . . . . . . . . . . . . . .   6
  71.  
  72.      Getting Started . . . . . . . . . . . . . . . . . . . . . . .   7
  73.           Basic Operation  . . . . . . . . . . . . . . . . . . . .   7
  74.           A Tour of the SNAP! Screens  . . . . . . . . . . . . . .   8
  75.           Author and Copyright Holder  . . . . . . . . . . . . . .   8
  76.           Paths  . . . . . . . . . . . . . . . . . . . . . . . . .   8
  77.           Saving and Restoring Default Choices . . . . . . . . . .   9
  78.           Abbreviations  . . . . . . . . . . . . . . . . . . . .    10
  79.           Status Reports . . . . . . . . . . . . . . . . . . . .    10
  80.           Searching the Program Tree . . . . . . . . . . . . . .    11
  81.           dBASE Version? . . . . . . . . . . . . . . . . . . . .    11
  82.           Ignoring Drive Designations  . . . . . . . . . . . . .    11
  83.           Printing SNAP! Documentation . . . . . . . . . . . . .    12
  84.           Using a Mouse  . . . . . . . . . . . . . . . . . . . .    13
  85.  
  86.      SNAP! Commands  . . . . . . . . . . . . . . . . . . . . . .    14
  87.           Macros . . . . . . . . . . . . . . . . . . . . . . . .    14
  88.           Indirect References  . . . . . . . . . . . . . . . . .    15
  89.           SNAPCODE--Fake Program Statements  . . . . . . . . . .    16
  90.           Multiple Program and Data Directories  . . . . . . . .    17
  91.           Program Narratives . . . . . . . . . . . . . . . . . .    17
  92.           Other SNAP! Directives . . . . . . . . . . . . . . . .    17
  93.  
  94.      Source Code Formatting Options  . . . . . . . . . . . . . .    19
  95.           File Headings  . . . . . . . . . . . . . . . . . . . .    19
  96.           Indentation  . . . . . . . . . . . . . . . . . . . . .    20
  97.           Capitalization . . . . . . . . . . . . . . . . . . . .    21
  98.           Key Word Expansion and Compression . . . . . . . . . .    22
  99.           Suppressing Blank Lines and Comments . . . . . . . . .    22
  100.           Key Words File . . . . . . . . . . . . . . . . . . . .    23
  101.  
  102.      Reports and Outputs . . . . . . . . . . . . . . . . . . . .    26
  103.           Controlling the Printer  . . . . . . . . . . . . . . .    26
  104.           Tree Structure Diagram . . . . . . . . . . . . . . . .    26
  105.           File List  . . . . . . . . . . . . . . . . . . . . . .    28
  106.           Database Summary . . . . . . . . . . . . . . . . . . .    28
  107.           Index File Summary . . . . . . . . . . . . . . . . . .    29
  108.           Format File Summary  . . . . . . . . . . . . . . . . .    30
  109.           Report Form Summary  . . . . . . . . . . . . . . . . .    30
  110.           Label Form Summary . . . . . . . . . . . . . . . . . .    31
  111.           Procedure File Summary . . . . . . . . . . . . . . . .    31
  112.           Other Summary Reports  . . . . . . . . . . . . . . . .    31
  113.           Variable Cross-Reference Report  . . . . . . . . . . .    32
  114.           LNK and MAKE files . . . . . . . . . . . . . . . . . .    35
  115.           Batch Files  . . . . . . . . . . . . . . . . . . . . .    36
  116.           Action Diagrams  . . . . . . . . . . . . . . . . . . .    37
  117.  
  118.                                      2
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  
  125.  
  126.           Source Code Printout . . . . . . . . . . . . . . . . .    40
  127.           Printing Without Documenting (Reprinting)  . . . . . .    42
  128.  
  129.      Using SNAP! in a Batch Environment  . . . . . . . . . . . .    43
  130.  
  131.      Random Notes  . . . . . . . . . . . . . . . . . . . . . . .    44
  132.  
  133.      Program Limitations . . . . . . . . . . . . . . . . . . . .    45
  134.           Legal Coding that is Prohibited by SNAP! . . . . . . .    45
  135.           Hyphens in Filenames . . . . . . . . . . . . . . . . .    46
  136.           Multiple Procedure Files . . . . . . . . . . . . . . .    46
  137.           Suppressing Color  . . . . . . . . . . . . . . . . . .    46
  138.  
  139.      Change History  . . . . . . . . . . . . . . . . . . . . . .    47
  140.  
  141.      Administrative Matters  . . . . . . . . . . . . . . . . . .    51
  142.           Version Numbers  . . . . . . . . . . . . . . . . . . .    51
  143.           Updates and New Versions . . . . . . . . . . . . . . .    51
  144.           How to Get Support . . . . . . . . . . . . . . . . . .    51
  145.           Association of Shareware Professionals . . . . . . . .    52
  146.  
  147.      Acknowledgements  . . . . . . . . . . . . . . . . . . . . .    53
  148.  
  149.      Appendix A -- Sample Reports  . . . . . . . . . . . . . . .    54
  150.  
  151.      Index . . . . . . . . . . . . . . . . . . . . . . . . . . .    78
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.                                      3
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.                                        Overview
  191.  
  192.      (A short note to the faithful: those of you who have used SNAP! before may
  193.      wish to turn directly to the Change History where new features in version
  194.      5.0 are summarized.)
  195.  
  196.      SNAP! makes documenting X-Base programs a snap.  SNAP! is designed to
  197.      produce technical documentation for an entire X-Base system.  Its reports
  198.      include:
  199.  
  200.           Formatted source code listings
  201.           System summary showing lines of code, file statistics, etc. 
  202.           Variable cross-reference report
  203.           Tree structure of the system.  The tree optionally can also show
  204.           databases, index files, etc. used by each program. 
  205.           List of all files in the system, plus a source reprint file
  206.           Database summary
  207.           Index file summary (including multiple index files)
  208.           Format file summary
  209.           Label form summary
  210.           Report form summary
  211.           Procedure/function file summary
  212.           BIN file summary
  213.           Memory file summary
  214.           Other files summary
  215.           Action diagrams
  216.           Batch files to back up programs, databases, etc. 
  217.           Batch file to move SNAP! output files back to the source subdirectory
  218.           For FoxPro 2.0 applications:
  219.                Screen file summary
  220.                Menu file summary
  221.           For Clipper applications:
  222.                Link files (PLINK86, TLINK, MS-LINK)
  223.                Make files
  224.  
  225.      In addition, on each program file, SNAP! can write a heading showing:
  226.  
  227.           Program name
  228.           System name
  229.           Author and copyright notice
  230.           Which programs, procedures and functions call this program
  231.           Which programs, procedures and functions this program calls
  232.           Databases used
  233.           Index files used
  234.           Formats used
  235.           Report forms used
  236.           Procedures
  237.           BIN files called or loaded
  238.           Memory files used
  239.  
  240.                                           4
  241.  
  242.  
  243.  
  244.  
  245.  
  246.  
  247.  
  248.           Other files used (text files, misc. files, and the like)
  249.           Date and time last modified
  250.  
  251.      If you wish, all source code headings can also be echoed to a separate
  252.      file.  Additionally, SNAP! can indent your source code and capitalize key
  253.      words to make your code easier to read, understand and maintain.
  254.  
  255.      Unlike many other X-Base documentation systems, SNAP! documentation is
  256.      system-wide.  In other words, not only can it tell you where variable X was
  257.      used in a particular program, it can cross-reference all occurrences of
  258.      variable X anywhere in the program system you are documenting.  You merely
  259.      enter the "top" program file name, and SNAP! does the rest.  Of course, you
  260.      may also document a single program if you wish.
  261.  
  262.  
  263.      X-Base Dialects
  264.  
  265.      SNAP! fully supports the following dialects of the X-Base language:
  266.           dBASE II
  267.           dBASE III
  268.           dBASE III+
  269.           dBASE IV 1.0
  270.  
  271.           FoxBASE
  272.           FoxBASE+ 2.1
  273.           FoxPro 1.0
  274.           FoxPro 2.0
  275.  
  276.           Clipper (releases through Summer '87)
  277.  
  278.      SNAP! provides limited support for Clipper 5.01.  Unfortunately, Clipper
  279.      has diverged too much from other X-Base dialects to make full support
  280.      practical.  My goal was to make SNAP! work as well as possible with Clipper
  281.      5.0 applications, and at least not break anything.  The following are 
  282.      supported:
  283.           STATIC functions (e.g., STATIC FUNCTION foo).
  284.           In-line function declarations (e.g., FUNCTION foo(params...) ).
  285.           Clipper 5.0 key words.
  286.           // comment marks.
  287.           /* */ comments, so long as they are at the beginning of a line, or
  288.                both the comment begin (/*) and comment end (*/) are on the same
  289.                line.
  290.           #include and #define directives (basically, #include is treated just
  291.                like a DO statement and #define is treated like a SNAP! macro
  292.                substitution).
  293.      Code blocks are not supported, but generally do no harm.
  294.  
  295.      In addition, SNAP! generally handles Force, dbXL, Quicksilver and VP-INFO
  296.      programs pretty well.  However, I do not guarantee that it fully supports
  297.      all features of these products.
  298.  
  299.       
  300.  
  301.                                           5
  302.  
  303.  
  304.  
  305.  
  306.  
  307.  
  308.  
  309.      Registration Fee
  310.  
  311.      There isn't one.  SNAP! can be copied and distributed freely, as long as it
  312.      is unchanged and you include this document file unmodified.  I encourage
  313.      you to give copies to your friends and co-workers, to upload them to
  314.      bulletin boards, and to leave them in bus stations.
  315.  
  316.  
  317.  
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336.  
  337.  
  338.  
  339.  
  340.  
  341.  
  342.  
  343.  
  344.  
  345.  
  346.  
  347.  
  348.  
  349.  
  350.  
  351.  
  352.  
  353.  
  354.  
  355.  
  356.  
  357.  
  358.  
  359.  
  360.  
  361.  
  362.                                           6
  363.  
  364.  
  365.  
  366.  
  367.  
  368.  
  369.  
  370.  
  371.                                    Getting Started
  372.  
  373.      First, make a backup copy of your program files.  I have tried to test
  374.      SNAP! on a variety of hardware and software combinations, and there
  375.      shouldn't be any danger, but I would feel awful if anyone lost program
  376.      files due to some curious combination of resident programs, unusual
  377.      equipment and sunspot activity, not to mention (gasp!) "features."  SNAP!
  378.      has been around for several years now and nobody has reported that SNAP!
  379.      has ever corrupted source code, but I would hate for you to be the first.
  380.  
  381.  
  382.      Basic Operation
  383.  
  384.      SNAP! is very easy to use.  If you accept the program's default options,
  385.      you only have to enter the following information on the TopFile screen:
  386.  
  387.           "Top" file name
  388.           System name
  389.           Author and copyright information
  390.           Paths for program, data, output and SNAP! files
  391.  
  392.      If you are happy with the defaults, just enter the information on the first
  393.      screen (the System screen), press F10 to see the main menu, then press 'B'
  394.      to begin documenting your system.
  395.  
  396.      The term "Top File" (spelled and punctuated in a variety of ways) is used
  397.      throughout this documentation to mean the first file in a system--the one
  398.      first invoked.
  399.  
  400.      You can press F10 to see the main menu.  Its choices largely correspond to
  401.      various option screens.  For example, you set report options on the Reports
  402.      Screen and there is a "Reports" choice on the main menu.
  403.  
  404.      If you don't want to use the menu, you can save a keystroke or two by using
  405.      the Alt key in combination with the menu choice you want.  For example,
  406.      without pressing F10 to pop up the menu, you can press Alt-R to see the
  407.      Reports Screen, Alt-B to Begin Documenting, Alt-Q to quit and so forth. 
  408.      Also, the Ctrl-PgUp and Ctrl-PgDn keys take you to the preceding and
  409.      succeeding screens respectively.
  410.  
  411.      The line at the bottom of the screen tells you which function keys are
  412.      active.  You can access these functions by pressing the function key or by
  413.      pointing at the description on the bottom of the screen with a mouse.  At
  414.      any point, you can press the F1 key to receive context-sensitive help. 
  415.      Help is available for each field.
  416.  
  417.      The SNAP! system is composed of the following files:
  418.           SNAP.EXE     -- main program file
  419.           SNAP.HLP     -- help file
  420.           SNAP.DOC     -- this documentation file
  421.           DB2WORDS.SNP -- key word file for dBASE II/FoxBASE 
  422.  
  423.                                           7
  424.  
  425.  
  426.  
  427.  
  428.  
  429.  
  430.  
  431.           DB3WORDS.SNP -- key word file for
  432.                          dBASE III/Clipper/FoxBASE+
  433.           DB4WORDS.SNP -- key word file for dBASE IV/FoxPro
  434.           SNAPPRT.SNP  -- printer definitions
  435.           filename.KEY -- key word files for third-party libraries
  436.  
  437.      All of these files must be in the same subdirectory, which may be different
  438.      than the subdirectory in which your dBASE source code files are stored.
  439.  
  440.  
  441.      A Tour of the SNAP! Screens
  442.  
  443.      SNAP! has seven main screens on which you can select various combinations
  444.      of options:
  445.           System:   Contains system-level information (system name, author, top
  446.                     file name, etc.).
  447.           Report:   Determines which documentation reports will be generated.
  448.           Format:   Determines source code formatting and action diagram options
  449.                     in effect.
  450.           Xref:          Determines what kinds of words will be in the cross-
  451.                          reference.
  452.           Headings: Determines what goes in a program heading.
  453.           Tree:          Determines what kinds of files will be shown on the
  454.                          tree diagram.
  455.           Print:    Determines source code printing parameters.
  456.           Other:    Other options.
  457.  
  458.      The next sections highlight a few of the fields that may have hidden
  459.      mysteries.
  460.  
  461.  
  462.      Author and Copyright Holder
  463.  
  464.      Enter the author and copyright holder in these fields.  This information is
  465.      used only in the program headings, and may be omitted if you choose not to
  466.      write program headings (you make that choice on the Format screen).  If you
  467.      enter either author or holder, but not both, SNAP! assumes that they are
  468.      the same.  The copyright date field is large enough to hold dates like
  469.      "1990-1991."
  470.  
  471.  
  472.      Paths
  473.  
  474.      The TopFile menu screen has four fields for path information--the path to
  475.      the source code, data, output and SNAP! files.  Your response should be a
  476.      valid MS-DOS path, with or without drive designation.  It doesn't matter if
  477.      you omit the final backslash (e.g., C:\SNAP is valid, as is C:\SNAP\ or
  478.      \SNAP).
  479.  
  480.      If the TopFile you specify cannot be found, or if the SNAP! files are not
  481.      where you say they are, SNAP! complains and will not let you begin
  482.  
  483.  
  484.                                           8
  485.  
  486.  
  487.  
  488.  
  489.  
  490.  
  491.  
  492.      documentation.  If the output directory does not exist, SNAP! will create
  493.      it.  If this is a FoxPro 2.0 system, TopFile can be a project.
  494.  
  495.      If your input and output paths are different, SNAP! will not modify your
  496.      original source code files in any way.  Only the output files will contain
  497.      capitalized key words, indents, headings and so on.
  498.  
  499.      On the other hand, if the source code and output paths are the same, SNAP!
  500.      adds .BAK extensions to your original input files and creates modified
  501.      output files with the original names.  For example, if one of your input
  502.      programs was named EDIT.PRG, after running SNAP! it will be called EDIT.BAK
  503.      and a new, modified EDIT.PRG will be in the directory.  This scheme works
  504.      fine as long as all your input files have unique names (not counting the
  505.      extension).  Otherwise, all but the last non-unique input file will be lost
  506.      (though the modified output files will still be there).  The best idea is
  507.      never to direct output to the input directory if the first eight characters
  508.      of all of your program files are not unique.
  509.  
  510.      See the section below on "Multiple Directories" for information about how
  511.      to define more than one data and program directory to SNAP!.  Note that
  512.      SNAP! pays no attention to "SET PATH TO" statements.  SNAP! also cannot
  513.      handle macro substitutions for drives or paths.
  514.  
  515.      SNAP! never modifies database, index, report form, label form, memory files
  516.      or binary files.
  517.  
  518.      When SNAP! decides you are about to do something particularly dangerous, it
  519.      may require you to direct output files to a different directory than the
  520.      input files are in.  Some "dangerous" options include expanding or
  521.      compressing key words and eliminating comments from source code.
  522.  
  523.  
  524.      Saving and Restoring Default Choices
  525.  
  526.      As you use SNAP!, you may wish to modify the default values for certain
  527.      fields.  For example, you may want to set the SNAP! path to \SNAP, or the
  528.      author and copyright holder to your name.  Press F5 to save the current
  529.      values of each field.  SNAP! will prompt you for a filename to use for the
  530.      configuration file.
  531.  
  532.      When you start SNAP!, you can specify the file to use for default values by
  533.      using the /F switch on the command line.  For example, the command:
  534.           SNAP /fc:\foo\bar.baz  (note: no space between '/f' and the filename).
  535.      tells SNAP! to look for a configuration file named 'bar.baz' in the '\foo'
  536.      subdirectory on drive c:.  If it cannot find it, SNAP! will start with
  537.      default values.  When you save the configuration, SNAP! uses the name you
  538.      specified.  If you do not specify a file, SNAP! looks for one called
  539.      CONFIG.SNP in the current directory. If the file you specify does not have
  540.      an extension, SNAP! assumes the extension is '.SNP'.  So the order for
  541.      establishing defaults is:
  542.           1.  A configuration file you specify on the command line
  543.           2.  CONFIG.SNP in the current subdirectory
  544.  
  545.                                           9
  546.  
  547.  
  548.  
  549.  
  550.  
  551.  
  552.  
  553.           3.  SNAP! factory default values
  554.  
  555.      I ordinarily save a separate configuration file for each system I use in
  556.      the same subdirectory with the system.  This is a big help for running
  557.      SNAP! in batch mode (see below) and for keeping subdirectories, filenames,
  558.      etc. straight.
  559.  
  560.      You can also press F6 to retrieve saved specifications.  Invoking SNAP!
  561.      with the /F command-line parameter is equivalent to entering the program,
  562.      pressing F6 at the System screen and entering a filename.
  563.  
  564.  
  565.      Abbreviations
  566.  
  567.      In general, SNAP! is pretty good about recognizing valid X-Base
  568.      abbreviations.  For example, it will properly detect that
  569.           <tab>DO <tab> WHIL<tab>
  570.      initiates a DO loop.  Version 3.00 also removed the earlier restriction on
  571.      abbreviating INDEX ('SET INDE TO foo' is fine now).
  572.  
  573.      Also, if you use X-Base key words as variable names, SNAP! can sometimes
  574.      become confused.  For example, if you use 'PROC' as a variable name within
  575.      a procedure file and put the statement 'PROC = FOO' within the file, SNAP!
  576.      will see the 'PROC' and think that it is initiating a new procedure. 
  577.      Common sense will ordinarily avoid this problem.  As always, it is a good
  578.      idea not to use key words in a way other than that intended by the
  579.      language, especially if you plan to compile the code; compilers tend to be
  580.      more picky about this restriction than interpreters.
  581.  
  582.  
  583.      Status Reports
  584.  
  585.      As SNAP! documents your programs, it updates a status screen that tells you
  586.      how much progress it has made.  The screen shows the file that SNAP! is
  587.      currently documenting and the number of lines in the file.  SNAP! makes two
  588.      passes through each file--one to determine which files use or call which
  589.      other files, and one for cross-referencing variables, formatting source
  590.      code and preparing action diagrams.
  591.  
  592.      In addition, if you choose any option that modifies source code (headings,
  593.      indentation, key word capitalization, compression or expansion, etc.), or
  594.      if you choose to display the cross-reference report, SNAP! will display a
  595.      more elaborate screen indicating how many programs (actually, programs,
  596.      procedures, functions, etc.), databases, indexes, format files, report
  597.      forms and variables it has found, along with the total number of program
  598.      lines documented so far, and the amount of free memory available. This
  599.      screen also shows the elapsed time since you began documentation.
  600.  
  601.      Note: some people have reported that the elapsed time is occasionally
  602.      negative.  This is normal.  It means that your computer is actually running
  603.      faster than light.  It is nothing to be concerned about unless you have an
  604.      8087 chip, which sometimes overheats when moving backwards in time.
  605.  
  606.                                           10
  607.  
  608.  
  609.  
  610.  
  611.  
  612.  
  613.  
  614.      If SNAP! identifies any errors during its run, it will print a brief error
  615.      message in a separate window in the upper right corner of the screen.  All
  616.      error messages are also echoed to the ERROR.DOC file.
  617.  
  618.  
  619.      Searching the Program Tree
  620.  
  621.      SNAP! assumes that you want to document not only the TopFile, but all
  622.      programs it calls, all programs called by programs that Top calls, and so
  623.      on.  In fact, SNAP! will search the program tree for all programs,
  624.      databases, index files, report forms, format files, label forms, memory
  625.      files, etc. as it prepares system documentation.  You never need to specify
  626.      more than the top program file name.
  627.  
  628.      If you choose not to search the tree (you can make this choice on the Other
  629.      Options Screen), only the specific file you enter will be documented. 
  630.      Thus, you can limit documentation to a particular file or a branch of the
  631.      program tree by varying either the file you input as Top or the search tree
  632.      parameter.
  633.  
  634.      Note that SNAP! does not track "SET DEFAULT TO x" statements, but always
  635.      expects to see files with no drive designations on the default drive and in
  636.      the source file subdirectory.
  637.  
  638.  
  639.      dBASE Version?
  640.  
  641.      On the Other Options screen, SNAP! asks which version of X-Base you are
  642.      using.  You should answer "4" if this is a dBASE IV or FoxPro system, or
  643.      "3" if this is dBASE III or a dBASE III "compatible" -- specifically
  644.      Clipper, FoxBASE+, or QuickSilver.  Answer "2" for dBASE II or FoxBASE
  645.      (original, dBASE II variety).
  646.  
  647.      SNAP! needs this information since different versions of X-Base use
  648.      different internal format for database and index files, as well as
  649.      different key words.  SNAP! reads Clipper index files, and handles Clipper
  650.      source code and databases without difficulty. If a specified dBASE III
  651.      index file is not found, SNAP! automatically searches for the corresponding
  652.      Clipper index file (with an NTX extension). SNAP! will also automatically
  653.      detect FoxBASE and FoxPro index files (IDX or CDX extensions) and document
  654.      them properly.
  655.  
  656.      Further, if you say that your system is a dBASE IV-type system, SNAP!
  657.      assumes that report form files are in dBASE IV or FoxPro format.  If they
  658.      are not, the system can hang when SNAP! bravely tries to read data that
  659.      isn't there.
  660.  
  661.  
  662.      Ignoring Drive Designations
  663.  
  664.      Sometimes you may want SNAP! to disregard explicit drive and path
  665.      designations when searching for data files.  A choice on the Other Options
  666.  
  667.                                           11
  668.  
  669.  
  670.  
  671.  
  672.  
  673.  
  674.  
  675.      screen instructs SNAP! to drop any drive or path designations before
  676.      attempting to find a file.  As an example, you may have written a backup
  677.      routine to copy a database to B:BACKUP.DBF.  If you would like SNAP! not to
  678.      try to find that file on the B: drive, choose the option to ignore drive
  679.      designations.  This option has no effect on SNAP!'s search for program
  680.      files.
  681.  
  682.  
  683.      Printing SNAP! Documentation
  684.  
  685.      SNAP! often produces a lot of documentation--perhaps more than you will
  686.      care to print.  It is not uncommon for SNAP! to produce several hundred
  687.      pages of documentation for a X-Base system of modest size.  It could take
  688.      days to print it all out on anything but a laser printer.
  689.  
  690.      You can print SNAP! documentation directly from SNAP!, with full control
  691.      over page margins, printer codes and so forth.  Set up your printer options
  692.      on the print options screen.  Hint: Press F2 while you are there and see if
  693.      a set of default options for your printer already exists.  
  694.  
  695.      By default, SNAP! sends its printed output to LPT1:.  This is usually where
  696.      your printer is, but if it isn't, or if you would like to send the printed
  697.      output to a file, use the -P command line switch, like this:
  698.           SNAP -pCOM2:
  699.      or
  700.           SNAP -p\foo\bar\output.txt
  701.      If you use the optional "NET" keyword:
  702.           SNAP -pLPT2:(NET)
  703.      you can tell SNAP! that your printer port (LPT2 in this example) is talking
  704.      to a network printer and that SNAP! should be a little more forgiving about
  705.      timeout warnings.
  706.  
  707.      Having said all that, I practically never print the documentation, but
  708.      review it on the screen instead.  However, if you decide to print the SNAP!
  709.      documentation files, you have several options.  First, you can simply copy
  710.      them to the printer like this:
  711.           COPY *.DOC PRN:
  712.  
  713.      A second option is to add the documentation files to the REPRINT.DOC file
  714.      (you have to add them with an editor--SNAP! doesn't do it automatically)
  715.      and use the "immediate print" capabilities of SNAP! (Press "F9--Print Now"
  716.      from the Print Options Screen) to print them.
  717.  
  718.      Alternatively, you can use a program such as the LP program in Norton
  719.      Utilities to print the files.  LP (it may be called LINEPRNT on your
  720.      system) prints the files with nice headings and page numbers.
  721.  
  722.      If you have a laser printer, I recommend that you take a look at a
  723.      Shareware program from Korenthal Associates called 4PRINT.  It prints four
  724.      pages of text on each physical piece of paper and can greatly reduce the
  725.      volume of printed SNAP! documentation.  
  726.  
  727.  
  728.                                           12
  729.  
  730.  
  731.  
  732.  
  733.  
  734.  
  735.  
  736.      I have gotten permission from Korenthal Associates to distribute 4PRINT on
  737.      the SNAP! distribution disk.  If you have an HP laser printer, I encourage
  738.      you to try 4PRINT.  If you use it and like it, please register it directly
  739.      to Korenthal Associates at 230 West 13th Street, New York, New York 10011. 
  740.      Telephone: (212) 242-1790.  It is also available on many bulletin board
  741.      systems.  The registration fee for the full package with printed
  742.      documentation is about $40.  Highly recommended.  When you register, please
  743.      jot a note on the form or tell them on the phone that you heard about it
  744.      through SNAP!.
  745.  
  746.      You can also run SNAP!, create documentation and formatted source code
  747.      files, then later restart SNAP! and print the source code.  Whenever you
  748.      choose to create a list of files used in the system (FILELIST.DOC), SNAP!
  749.      also creates the REPRINT.DOC file that can be used to reprint all SNAP!
  750.      source code and action diagram files.  Using the "F9--Print Now" function
  751.      on the print options screen, you can tell SNAP! to print everything listed
  752.      in REPRINT.DOC.  Should you decide to print any files in addition to source
  753.      code and action diagrams, you can add their names to REPRINT.DOC.
  754.  
  755.      In addition to REPRINT.DOC, which holds the names of source code files,
  756.      SNAP! creates DOCLIST.DOC, which holds the names of documentation files. 
  757.      Should you wish to, you can use the "F9--Print Now" option to print SNAP!
  758.      documentation files.  Even so, I recommend 4PRINT instead (see above).
  759.  
  760.  
  761.      Using a Mouse
  762.  
  763.      SNAP! is mouse friendly.  You can use the mouse to position the cursor in
  764.      data entry fields, select function keys and navigate the help system.  To
  765.      select one of the function keys with the mouse, point at the function key
  766.      definition on the bottom of the screen. 
  767.  
  768.      In general, pressing the left button is like pressing the enter key and
  769.      pressing the right button is like pressing escape.  For example, pressing
  770.      the right button from a data entry screen calls the main menu, just as if
  771.      you had pressed escape.
  772.  
  773.      There are a couple of wrinkles to using the mouse inside the help system. 
  774.      Press the right mouse button to exit help.  If there is more than one
  775.      screen of help, you can click on the arrow on the right side to scroll the
  776.      page.  While help is active, you cannot move the mouse pointer outside the
  777.      help window.
  778.  
  779.  
  780.  
  781.  
  782.  
  783.  
  784.  
  785.  
  786.  
  787.  
  788.  
  789.                                           13
  790.  
  791.  
  792.  
  793.  
  794.  
  795.  
  796.  
  797.                                     SNAP! Commands
  798.  
  799.      SNAP! supports several commands that you can insert in your source code
  800.      files.  These commands will look like comments to X-Base systems, but will
  801.      have a special meaning for SNAP!.  The commands allow you to define macros,
  802.      insert imaginary program statements into your system, turn SNAP! features
  803.      on and off for particular parts of your system, and so forth.
  804.  
  805.      Macros
  806.  
  807.      SNAP! has a limited ability to do macro substitutions.  To define a macro,
  808.      place the following line in your source code:
  809.  
  810.           *# SNAPMACRO  source  target1 target2 . . .
  811.  
  812.      Alternatively, or in conjunction with this method, you can also define
  813.      macro substitutions in a separate file.  Specify the /mfilename switch on
  814.      the command line to tell SNAP! which file the substitution strings are in. 
  815.      For example, the following command will start SNAP! and read macro
  816.      definitions from the file FOO.MAC:
  817.  
  818.           SNAP /mFOO.MAC
  819.  
  820.      If you do not specify a filename with the /m switch, SNAP! will try to find
  821.      MACRO.SNP. You must use the full "*# SNAPMACRO" command verb on each line
  822.      of the file.  Macro substitutions defined in source code files take
  823.      precedence over those defined in a separate macro file.
  824.  
  825.      The /O switch on the SNAP! command line disables all macro processing, both
  826.      from SNAPMACRO statements in source code and in a named macro file.
  827.  
  828.      Note that the SNAPMACRO statement begins with an asterisk and a pound sign.
  829.      SNAP! uses this sequence of characters to designate a SNAP! command (see
  830.      the /T command line switch for information on how to change these
  831.      characters). 'Source' must be a single word, delimited by spaces or tabs. 
  832.      "Target" means the rest of the line.  Everything on the line--both source
  833.      and target--will be converted to upper case.
  834.  
  835.      Note that the source string does not include the ampersand (&) symbol for
  836.      the macro (e.g., use SOURCE instead of &SOURCE).  The rest of the line
  837.      (minus leading and trailing blanks) will be used as a substitution string. 
  838.      The target can be a single word or several words.
  839.  
  840.      You cannot use && comments on a SNAPMACRO line since SNAP! will think they
  841.      are part of the target.  If you want to document the purpose of the
  842.      SNAPMACRO statement, put a comment on the line above it.
  843.  
  844.      The SNAPMACRO statement can appear anywhere, as long as SNAP! sees it
  845.      before encountering the macro that you want to replace. If the target will
  846.      have the same value throughout the system (e.g., FOO will always be
  847.      replaced by BAR), it is a good idea to put all of the macros in one place,
  848.      perhaps at the top of the TopFile or in a separate macro file.
  849.  
  850.                                           14
  851.  
  852.  
  853.  
  854.  
  855.  
  856.  
  857.  
  858.      If you would like SNAP! to use different macro values during documentation,
  859.      you may want to place the SNAPMACRO statement immediately before the
  860.      specific location of each macro substitution.  If you have multiple
  861.      definitions for a single macro, only the last one SNAP! sees will be
  862.      effective.  For example, if the following series of statements are in your
  863.      program,
  864.  
  865.           *# SNAPMACRO s_ddndx  target1
  866.           *# SNAPMACRO s_ddndx  target2
  867.           *# SNAPMACRO s_ddndx  target3
  868.  
  869.      only 'target3' will be effective and will be substituted for each
  870.      occurrence of &s_ddndx.  See also the discussion of SNAPCODE statements
  871.      below for an alternative approach.
  872.  
  873.      SNAP! will try to remove macros that look like drive or path designations. 
  874.      For example, if the following statement is in one of your programs:
  875.  
  876.           USE &MPATH.DATABASE
  877.  
  878.      SNAP! will detect the macro and remove it before trying to find
  879.      DATABASE.DBF.  One consequence of this limit is that you cannot use macros
  880.      to refer to program files in different directories. All source code program
  881.      files (programs, format files, memory files, etc.) must reside in the
  882.      single program directory you specify in the System screen.  Databases and
  883.      indexes can be in either the program or data directories you specify.
  884.  
  885.      SNAP! will not substitute the macro in the code itself, but will use the
  886.      substitution value everywhere else.  For example, assume your program uses
  887.      a database whose name is contained in a macro variable named 'dataname'. 
  888.      Assume further that you have included the following line in your code:
  889.  
  890.           *# SNAPMACRO dataname ABC.DBF
  891.  
  892.      If your code has this line in it:
  893.  
  894.           USE &dataname
  895.  
  896.      the source code will be unchanged after running SNAP!, but the program
  897.      headings and all other SNAP! reports will show this program using the
  898.      ABC.DBF database.
  899.  
  900.      See also the section below "Fake Program Statements--SNAPCODE" for other
  901.      ideas on how to document macros.
  902.  
  903.  
  904.      Indirect References
  905.  
  906.      In many circumstances, FoxPro and Clipper allow you to specify filenames
  907.      and other strings as indirect references.  For example, the following code
  908.      is valid in Clipper Summer 87:
  909.         foo = 'FILENAME'
  910.  
  911.                                           15
  912.  
  913.  
  914.  
  915.  
  916.  
  917.  
  918.  
  919.         bar = '.TXT'
  920.         SET PRINTER TO (foo+bar)
  921.      This is equivalent to the statement:
  922.         SET PRINTER TO filename.txt
  923.  
  924.      SNAP! partially supports indirect references.  When SNAP! sees one, it
  925.      tries to apply macro substitution to the indirect reference.  Therefore,
  926.      the following code will document properly:
  927.         *# SNAPMACRO foo dbfname
  928.         USE (foo)
  929.      SNAP! will pick up the reference to the "dbfname" database.  However, more
  930.      complicated indirect references will usually not be picked up correctly. 
  931.      For example, SNAP! will not be able to figure out what is going on in the
  932.      following code:
  933.         dirname = 'CLIPPER'
  934.         USE ('C:\'+ALLTRIM(dirname)+'\filename')
  935.      When SNAP! encounters such an indirect reference, it does not include it in
  936.      the documentation.  This limitation only applies to FoxPro and Clipper
  937.      systems, and only when you use indirect references.  You can use SNAPCODE
  938.      (see below) to force this database to be documented.
  939.  
  940.  
  941.      SNAPCODE--Fake Program Statements
  942.  
  943.      Sometimes you may want to enter fake program source code statements --
  944.      statements that SNAP! treats as real but which do not actually interfere
  945.      with your program when it executes.  A good example is a macro that calls
  946.      one of a number of programs, depending on the value it has at run time
  947.      (e.g., DO &program). The macro substitution discussed in the section above
  948.      provides a way for you to specify one value for 'program'.  But suppose you
  949.      wanted SNAP! to assume that 'program' had several values and to document
  950.      each one in turn?  The *# SNAPCODE directive provides a way.
  951.  
  952.      The *# SNAPCODE directive causes SNAP! to treat any text on the line as if
  953.      it were a program source code statement.  In the example above, you could
  954.      enter the following lines where the macro was called:
  955.  
  956.           DO &program                    <---- in original program *# SNAPCODE
  957.           DO foo
  958.           *# SNAPCODE DO bar
  959.           *# SNAPCODE DO brlfq
  960.  
  961.      SNAP! acts as if these were perfectly straightforward calls to 'foo', 'bar'
  962.      and 'brlfq', and documents them accordingly.  dBASE and related systems
  963.      ignore the statements.
  964.  
  965.      Note that SNAP! does not know that these SNAPCODE statements have anything
  966.      to do with the DO statement above.  SNAP! does not associate 'foo' with
  967.      'program'.  The next time SNAP! sees 'DO &program' it will not assume that
  968.      'program' has the value 'foo'. If you want SNAP! to associate values with
  969.      macros, use the SNAPMACRO directive.
  970.  
  971.  
  972.                                           16
  973.  
  974.  
  975.  
  976.  
  977.  
  978.  
  979.  
  980.      As a side benefit, SNAPCODE statements help document your code by
  981.      specifying the permissible values that particular macros can take.
  982.  
  983.  
  984.      Multiple Program and Data Directories
  985.  
  986.      SNAP! prompts you for a program and a data directory on the system screen,
  987.      but you can define additional directories with special directives, as
  988.      follows:
  989.           *# SNAP PRGPATH \foo\bar1
  990.           *# SNAP PRGPATH \foo\bar2
  991.                ... and so forth
  992.      and
  993.           *# SNAP DATAPATH \foo\bar3
  994.  
  995.      When SNAP! looks for a file, it first searches the current directory, then
  996.      all the program directories (for a program-type file) or the data
  997.      directories (for a data-type file).
  998.  
  999.      Program-type files include: programs, procedure files, format files, report
  1000.      forms, label forms, FoxPro 2.0 files (queries, screens and menu files),
  1001.      memory files and binary files.
  1002.  
  1003.      Data-type files include databases, indexes, and multiple indexes.
  1004.  
  1005.  
  1006.      Program Narratives
  1007.  
  1008.      An important part of a well-documented system is a narrative explanation of
  1009.      the purpose of each program module.  Unfortunately, SNAP! can't figure this
  1010.      out on its on.  However, it does allow you to describe your programs, and
  1011.      it provides a way for your descriptions to be echoed to the HEADINGS.DOC
  1012.      file.  Any comments that start with "*)" will be interpreted as program
  1013.      narratives and will be sent to HEADINGS.DOC.  Naturally, these comments
  1014.      will also be left alone in the source code.  Normally you will want to put
  1015.      these narratives immediately below the SNAP! headings, but SNAP! will
  1016.      recognize them wherever they are.
  1017.  
  1018.  
  1019.      Other SNAP! Directives
  1020.  
  1021.      Other SNAP! commands, or directives, allow you to turn cross- referencing
  1022.      and program formatting on or off for particular programs.  For example, you
  1023.      may have "boilerplate" code that you have thoroughly debugged and formatted
  1024.      which you insert into many other systems.  It would be unnecessarily
  1025.      time-consuming to reformat this code every time you ran SNAP!.  SNAP!
  1026.      provides other commands to temporarily suspend cross-referencing and
  1027.      formatting-- XREF, FORMAT, INDENT, CAPITAL, and EXPAND.  Each of these
  1028.      commands accepts three settings--ON, OFF and SUSPEND.  The ON and OFF
  1029.      commands are effective until SNAP! sees another directive, while SUSPEND is
  1030.      in effect only until the end of the current program or procedure.  For
  1031.      example, if you insert this line in your code:
  1032.  
  1033.                                           17
  1034.  
  1035.  
  1036.  
  1037.  
  1038.  
  1039.  
  1040.  
  1041.           *# SNAP XREF OFF
  1042.      no tokens will be cross-referenced until this line is encountered:
  1043.           *# SNAP XREF ON
  1044.      On the other hand,
  1045.           *# SNAP XREF SUSPEND
  1046.      suspends cross-referencing only for the current file.  It starts up again
  1047.      when the next program or procedure is documented.
  1048.  
  1049.      I suspend cross-referencing for commonly-used subroutines in my code.  For
  1050.      example, since Clipper does not have a BROWSE command, I often include a
  1051.      public-domain BROWSE program in my systems. This is a standalone module
  1052.      that really has nothing to do with the rest of my system, and I don't want
  1053.      its variables cluttering up my cross-reference report.  So, I say:
  1054.           *# SNAP XREF SUSPEND
  1055.      at the top of the file and SNAP! leaves it alone.
  1056.  
  1057.      SNAP FORMAT works in the same way.  If format is off, no indenting or
  1058.      capitalization will be done.  When SNAP! sees a SNAP FORMAT statement, it
  1059.      affects the internal codes that determine whether indenting, capitalization
  1060.      and key word expansion (or contraction) take place.  The three commands
  1061.      (INDENT, CAPITAL and EXPAND) turn specific features on or off.  Thus, the
  1062.      following sequence suspends indenting and capitalization, but enables key
  1063.      word expansion:
  1064.           *# SNAP FORMAT SUSPEND
  1065.           *# SNAP CAPITAL ON
  1066.      Thus, FORMAT is a shorthand way of referring to CAPITAL, INDENT and EXPAND
  1067.      all at once.
  1068.  
  1069.      If *# is an inconvenient sequence for you (e.g, it may cause confusion with
  1070.      the British pound sign), you can change it with the /T switch on the
  1071.      command line.  For example, if you invoke SNAP! with the switch "/T*$",
  1072.      SNAP! will use *$ to designate SNAPMACRO, SNAPCODE and other SNAP!
  1073.      directives.  You must start this sequence with an asterisk (so that dBASE
  1074.      knows it is a comment) and it cannot be more than three characters long.
  1075.  
  1076.  
  1077.  
  1078.  
  1079.  
  1080.  
  1081.  
  1082.  
  1083.  
  1084.  
  1085.  
  1086.  
  1087.  
  1088.  
  1089.  
  1090.  
  1091.  
  1092.  
  1093.  
  1094.                                           18
  1095.  
  1096.  
  1097.  
  1098.  
  1099.  
  1100.  
  1101.  
  1102.                             Source Code Formatting Options
  1103.  
  1104.  
  1105.      File Headings
  1106.  
  1107.      One of the most useful SNAP! features is a heading written to each file in
  1108.      the system.  Each heading indicates:
  1109.  
  1110.           Program name
  1111.           System name
  1112.           Copyright notice
  1113.           Author
  1114.           Procedures defined within this file
  1115.           Which programs this program calls
  1116.           Which programs call this program
  1117.           Databases, index files, report forms, format files, label forms,
  1118.           memory files, etc. used by this program
  1119.           Date and time documented.
  1120.  
  1121.      A sample heading is included in the Appendix.   The sample heading
  1122.      indicates that TODOINP.PRG is called by TODOMENU, calls TIME and TESTDATE,
  1123.      uses a file whose name is contained in S_TDFILE with index TODO (macro
  1124.      substitution was not used for this example), and also uses the TODOINP
  1125.      format file.  The heading also indicates the system name, author, copyright
  1126.      and date documented.  You may want to add more information to the header,
  1127.      such as a brief narrative description of the program's purpose.
  1128.  
  1129.      If you choose to write headings on your source code files (or if you choose
  1130.      any other option that modifies the source code file), it is a good idea to
  1131.      send the output files to a different directory than the input files so that
  1132.      your original source code remains unchanged.
  1133.  
  1134.      If you choose to send output files to the input directory, your original
  1135.      source code file will be renamed with a .BAK extension. If you use
  1136.      extensions to distinguish between program files, some of your original
  1137.      source code files could be destroyed.  For example, if your system uses the
  1138.      following program file names:
  1139.  
  1140.           SYSTEM.INP
  1141.           SYSTEM.EDT
  1142.           SYSTEM.RPT
  1143.           SYSTEM.DEL
  1144.  
  1145.      and so on, the output files containing the headings will retain these
  1146.      names.  Each of the input files, however, will have been renamed to a file
  1147.      called SYSTEM.BAK, and only the last one will still exist when SNAP!
  1148.      completes.  Therefore, you should always send output files to a separate
  1149.      subdirectory if you use this naming convention.
  1150.  
  1151.      As always, you should make regular backups, and you should be especially
  1152.      careful to make a full backup of all your files before running SNAP!.
  1153.  
  1154.  
  1155.                                           19
  1156.  
  1157.  
  1158.  
  1159.  
  1160.  
  1161.  
  1162.  
  1163.      By default, SNAP! leaves the date and time of last update unchanged for
  1164.      each of your files.  You can instruct SNAP! to update the date and time
  1165.      last changed on the source code format screen.  The headings written to
  1166.      each program file show the date and time SNAP! was run.
  1167.  
  1168.  
  1169.      Indentation
  1170.  
  1171.      SNAP! can also help format your source code to make it easier to read. 
  1172.      SNAP! can recognize dBASE control structures and indent the program
  1173.      statements underneath them.  By default, indentation is three spaces.  If
  1174.      you choose tabs, however, should you choose to use SNAP!'s source code
  1175.      printing routines you can select the number of spaces to be inserted for
  1176.      each tab as the code prints.
  1177.  
  1178.      However, if you would like to use spaces rather than tab characters for
  1179.      indenting, you can select this option from the Format options screen.  For
  1180.      example, you can instruct SNAP! to use three spaces for each indentation
  1181.      level.  This option has no effect if you do not choose to indent source
  1182.      code.  It is different from the option in the source code printing facility
  1183.      that also allows you to expand tabs.  If you choose to use spaces to indent
  1184.      your source code files, the source code will not contain tabs, so the
  1185.      source code printing tab-expansion feature will have no effect.
  1186.  
  1187.      If you choose to indent source code or create action diagrams, SNAP! will
  1188.      also scan your code for mismatched control structure terminators.  For
  1189.      example, if your code has the following sequence:
  1190.  
  1191.           DO WHILE T      statements
  1192.           .
  1193.           .
  1194.           .
  1195.           IF X = Y
  1196.           .
  1197.           .
  1198.           ENDIF
  1199.           ENDIF      <---- incorrect
  1200.  
  1201.      SNAP! will detect that the final statement should have been an ENDDO
  1202.      instead of an ENDIF and will display an appropriate error message.  SNAP!
  1203.      will accept 'END' as a valid abbreviation of ENDDO, ENDIF or ENDCASE.
  1204.  
  1205.      SNAP! does not track control structures across program or procedure
  1206.      boundaries.  Normally, this is not a problem since you cannot start a DO
  1207.      WHILE loop in one program and finish it in another.  BREAK statements,
  1208.      however, can exit from a BEGIN/END SEQUENCE control structure that is
  1209.      defined in another program. If SNAP! encounters a BREAK statement but
  1210.      cannot find the BEGIN/END SEQUENCE structure, it reports an error.  Just
  1211.      ignore it if you know that the BREAK is valid.
  1212.  
  1213.  
  1214.  
  1215.  
  1216.                                           20
  1217.  
  1218.  
  1219.  
  1220.  
  1221.  
  1222.  
  1223.  
  1224.      The format options screen allows you to add an extra level of indenting
  1225.      underneath procedures and functions.  By default, SNAP! indents procedures
  1226.      and functions like this:
  1227.           PROCEDURE something
  1228.           foo = bar
  1229.           ? 'Hello, sailor'
  1230.           RETURN
  1231.  
  1232.      If you choose to indent procedures and functions, your source will appear
  1233.      like this:
  1234.           PROCEDURE something
  1235.                foo = bar
  1236.                ? 'Hello, sailor'
  1237.           RETURN
  1238.  
  1239.      Most people indent CASE statements in the following way, as God intended:
  1240.  
  1241.           DO CASE
  1242.           CASE foo = bar
  1243.           CASE xyzzy = plugh
  1244.           ENDCASE
  1245.  
  1246.      Certain stubborn users, however, insist on indenting CASE statements like
  1247.      this:
  1248.  
  1249.           DO CASE
  1250.                CASE foo = bar
  1251.                CASE xyzzy = plugh
  1252.           ENDCASE
  1253.  
  1254.      If you invoke SNAP! with the -A command line switch, you too can use this
  1255.      wretched technique.
  1256.  
  1257.  
  1258.      Capitalization
  1259.  
  1260.      SNAP! will also capitalize dBASE key words found in your source code.  Key
  1261.      words are stored in a file called DBxWORDS.SNP where x is a 2, 3 or 4
  1262.      depending on the version of dBASE you are using (you can also specify
  1263.      another file).  SNAP! does not attempt to parse code statements to
  1264.      determine how a word is used, so if you use key words as variable or field
  1265.      names, they will also be capitalized.  Should you wish not to capitalize a
  1266.      particular key word, you can either delete it from the DBxWORDS.SNP file,
  1267.      or "comment it out" by putting an asterisk before it in the file (e.g.,
  1268.      RELEASE becomes *RELEASE).
  1269.  
  1270.      The preceding paragraph assumes you prefer "standard" capitalization--key
  1271.      words are capitalized, functions have an initial capital letter, and
  1272.      everything else is in lower case.  If not, you can change it on the Format
  1273.      screen.  You can select upper case, lower case, initial caps, or none
  1274.      (leave it alone) for both tokens and for key words.  Thus, if you were so
  1275.  
  1276.  
  1277.                                           21
  1278.  
  1279.  
  1280.  
  1281.  
  1282.  
  1283.  
  1284.  
  1285.      inclined, you could capitalize tokens (variables, etc.) and lowercase key
  1286.      words.
  1287.  
  1288.  
  1289.      Key Word Expansion and Compression
  1290.  
  1291.      SNAP! will allow you to expand abbreviated key words to their full length,
  1292.      or to abbreviate the key words to four characters. Compilers don't care
  1293.      about any of this, but the dBASE interpreter runs programs slightly,
  1294.      usually very slightly, faster if the key words are abbreviated to their
  1295.      first four characters.  An option on the Format screen controls how
  1296.      expansion or compression is done.  The default is no expansion or
  1297.      compression--SNAP! leaves your code alone.  However, you can select
  1298.      expansion, or compression to any number of characters between 4 and 9.
  1299.  
  1300.      Please be careful with this option, especially if you are not very careful
  1301.      about how you name variables.  The only thing SNAP! knows about key words
  1302.      are that they are in the key words file. If one of your variables is a key
  1303.      word (or a valid abbreviation of a key word), SNAP! will cheerfully expand
  1304.      or contract it along with everything else.  SNAP! cannot tell how whether a
  1305.      particular word is being used as a command or as a variable.  Normally,
  1306.      this will not be a big problem--if you named a variable "title" and
  1307.      compressed key words, it will now be called "titl".  Problems could arise,
  1308.      however, if two variables are valid abbreviations of the same key word
  1309.      (e.g., "other" and "otherw", both of which are valid abbreviations of
  1310.      OTHERWISE).  If you compress key words and have such variable names, both
  1311.      variables will be compressed to OTHE, and there is no way to separate them
  1312.      again.  Also, if you are using a dialect of X-Base that supports
  1313.      user-defined functions (UDFs), and if one of the UDFs has the same name as
  1314.      a key word (Tom Rettig's BLANK() function, for example), the UDF name will
  1315.      be compressed (assuming the UDF name was in the key words file). If you
  1316.      compress keywords in this case, nothing desirable will happen.
  1317.  
  1318.      Because of the irrevocable changes that this option can make, SNAP! will
  1319.      not allow you to exercise it if the source and output directories are the
  1320.      same.  In other words, SNAP! will refuse to overwrite your original source
  1321.      code files if you select this option.  Big brother is looking out for you.
  1322.  
  1323.      If you use the compression option, please run the compressed code and
  1324.      ensure that it works before you delete the backups that SNAP! made.
  1325.  
  1326.      Key words that are identified in the key words file as functions (they have
  1327.      () after their name--see below) are never affected by key word compression
  1328.      or expansion.
  1329.  
  1330.  
  1331.      Suppressing Blank Lines and Comments
  1332.  
  1333.      You can suppress blank lines and/or comments from the output files by
  1334.      selecting the appropriate options on the Format screen. I do not recommend
  1335.      this, but it does make interpreted X-Base applications run slightly faster. 
  1336.      Please be doubly sure to make backups before doing this.  SNAP!'s default
  1337.  
  1338.                                           22
  1339.  
  1340.  
  1341.  
  1342.  
  1343.  
  1344.  
  1345.  
  1346.      options are to leave both blank lines and comments in the output file, so
  1347.      you have to take special action yourself before they will be dropped.
  1348.  
  1349.      Clipper "/* */" and "//" comments are not removed even if you elect to
  1350.      eliminate comments.
  1351.  
  1352.      As with key word expansion and compression, you cannot select this option
  1353.      if the source and output subdirectories are the same.
  1354.  
  1355.      If you know how to design an effective counterpart to this feature--how to
  1356.      put the comments back in--please contact me about a potentially lucrative
  1357.      commercial venture.
  1358.  
  1359.  
  1360.      Key Words File
  1361.  
  1362.      Capitalization, cross-referencing and key word expansion and compression
  1363.      are controlled by the words in the key words file. The key word file should
  1364.      contain one key word per line. Capitalization and order do not matter,
  1365.      except that if two identical key words have different flags (see below),
  1366.      the last one takes precedence.
  1367.  
  1368.      By inserting the correct characters in the key word file, you can cause
  1369.      certain key words or variables to be handled differently than normal.  The
  1370.      following characters have a special meaning in the key word file when
  1371.      inserted immediately before a word:
  1372.  
  1373.           *    Comments out the word.  SNAP! acts as if it were not in the key
  1374.                word file at all.
  1375.  
  1376.           !    Capitalize, but do no cross-reference even when the option to
  1377.                cross-reference key words is in effect.  You may want to use this
  1378.                character for often-used but uninteresting key words such as TO
  1379.                or, perhaps, SAY.
  1380.  
  1381.           @    Capitalize and always cross-reference this word, even when the
  1382.                option to cross-reference key words is not in effect.  You might
  1383.                want to use this for especially important key words such REPLACE,
  1384.                SAVE, or QUIT.
  1385.  
  1386.           %    Neither capitalize nor cross-reference, regardless of whether the
  1387.                options to capitalize or cross-reference key words are in effect.
  1388.                You may want to use this character for variables that you use
  1389.                frequently, but that you are not interested in
  1390.                cross-referencing--perhaps "i", "choice", "action", or "lineno". 
  1391.                This will keep them from cluttering up the cross-reference
  1392.                report.  Such words are not affected by key word expansion or
  1393.                contraction.
  1394.  
  1395.           ()   If the *last* two characters in a key word are (), the key word
  1396.                will ordinarily have an initial capital letter in the formatted
  1397.                output.  The DB3WORDS.SNP file that comes with SNAP! uses this
  1398.  
  1399.                                           23
  1400.  
  1401.  
  1402.  
  1403.  
  1404.  
  1405.  
  1406.  
  1407.                notation to designate the Tom Rettig key words (Tom Rettig is the
  1408.                author of a popular set of functions for dBASE III and Clipper)
  1409.                and the keywords in the PROCLIP3 library.  Functions are never
  1410.                affected by key word expansion or contraction.
  1411.  
  1412.      The following examples illustrate how to use these special characters:
  1413.  
  1414.           *note
  1415.           !SAY
  1416.           @REPLACE
  1417.           %CHOICE
  1418.           SOME_FUNCTION()
  1419.  
  1420.      There are two ways to tell SNAP! about key words.  First, the Format screen
  1421.      allows you to specify the main key words file, which will usually be
  1422.      DB4WORDS.SNP for FoxPro or dBASE IV systems, DB3WORDS.SNP for Clipper,
  1423.      dBASE III and FoxBASE+, and DB2WORDS.SNP for any wretches still using dBASE
  1424.      II.  In addition, SNAP! will look for a file called PERSONAL.KEY in the
  1425.      SNAP! subdirectory (the subdirectory where you put SNAP!--it doesn't
  1426.      actually have to be named "SNAP!").  Anything found in PERSONAL.KEY will be
  1427.      treated just as if it were in, say, DB4WORDS.SNP.  Therefore, you can
  1428.      customize your key words list without messing up the factory-installed
  1429.      DB4WORDS.SNP file.
  1430.  
  1431.      SNAP! is distributed with key words files for a variety of third-party
  1432.      function libraries.  Naturally, different programmers will use different
  1433.      libraries.  If you use one of the supported libraries, just include its key
  1434.      words into the main SNAP! key words file (e.g., DB4WORDS.SNP) or into your
  1435.      PERSONAL.KEY file.  The best way to add a library's key words is to put "*#
  1436.      INCLUDE" statements like this in your PERSONAL.KEY file or into
  1437.      DB4WORDS.SNP:
  1438.         *# INCLUDE rettig.key
  1439.         *# INCLUDE proclip.key
  1440.      SNAP! will then recognize all the key words in RETTIG.KEY.  These "*#
  1441.      INCLUDE statements" can be nested, but they have to be in either the main
  1442.      key words file or in PERSONAL.KEY.  A "*# INCLUDE" statement in a source
  1443.      code file is ignored.  In addition to using "*# INCLUDE" statements, you
  1444.      can use a word processor or program editor to move the words into
  1445.      PERSONAL.KEY or DB4WORDS.SNP.
  1446.  
  1447.      "Support" for third-party libraries is really just a list of key words. 
  1448.      You can easily add key words from any other library that I didn't include--
  1449.      SNAP! itself doesn't have to be modified.
  1450.  
  1451.      SNAP! provides enough space for a maximum of 1,500 key words.  This is far
  1452.      more than is required for all dialects of X-Base put together, but is not
  1453.      enough for all of the third-party libraries also.  Therefore, you should
  1454.      just update the main key words file for the libraries you actually use. 
  1455.      Any key words past the limit will be ignored.  
  1456.  
  1457.      SNAP! does not try to detect duplicate key words.  They don't cause any
  1458.      harm, but they all count against the limit.  If you have duplicate key
  1459.  
  1460.                                           24
  1461.  
  1462.  
  1463.  
  1464.  
  1465.  
  1466.  
  1467.  
  1468.      words with different control characters (see above), the control character
  1469.      set that will be used by SNAP! is deterministic but unpredictable. 
  1470.  
  1471.  
  1472.  
  1473.  
  1474.  
  1475.  
  1476.  
  1477.  
  1478.  
  1479.  
  1480.  
  1481.  
  1482.  
  1483.  
  1484.  
  1485.  
  1486.  
  1487.  
  1488.  
  1489.  
  1490.  
  1491.  
  1492.  
  1493.  
  1494.  
  1495.  
  1496.  
  1497.  
  1498.  
  1499.  
  1500.  
  1501.  
  1502.  
  1503.  
  1504.  
  1505.  
  1506.  
  1507.  
  1508.  
  1509.  
  1510.  
  1511.  
  1512.  
  1513.  
  1514.  
  1515.  
  1516.  
  1517.  
  1518.  
  1519.  
  1520.  
  1521.                                           25
  1522.  
  1523.  
  1524.  
  1525.  
  1526.  
  1527.  
  1528.  
  1529.                                  Reports and Outputs
  1530.  
  1531.      SNAP! can produce any combination of several reports.  Each report is
  1532.      optional and can be selected or suppressed on the Options Screen. However,
  1533.      some reports (e.g. Database summary, Index summary) require you to search
  1534.      the tree rather than document a single program.
  1535.  
  1536.      Normally, SNAP! tells you that it is producing a particular report, but
  1537.      does not display the report on the screen.  However, each report other than
  1538.      a file heading, may be displayed on the screen as it is echoed to a file. 
  1539.      You can enable screen echoing by invoking SNAP! with the /S command line
  1540.      parameter.  I like to see the reports being generated but some people
  1541.      prefer to silence the screen to improve SNAP!'s speed.  Note that the /S
  1542.      switch only affects the screen display of reports and has no effect on the
  1543.      status screens that are displayed as SNAP! scans source code files.
  1544.  
  1545.      The program contains default filenames (e.g., XREF.DOC for the
  1546.      cross-reference report), but you can change them if you wish.
  1547.  
  1548.  
  1549.      Controlling the Printer
  1550.  
  1551.      SNAP! allows you to specify a number of parameters for controlling your
  1552.      printer.  These parameters include margins, setup strings, and so forth. 
  1553.      In addition to entering them directly, you can also press F2 and select
  1554.      some standard printer configurations from a scrollable list.  These printer
  1555.      definitions are stored in the SNAPPRT.SNP file, an ASCII file which you can
  1556.      edit yourself to add more printer definitions.  SNAP! supports up to 10
  1557.      printer definitions.
  1558.  
  1559.  
  1560.      System Summary
  1561.  
  1562.      This report shows the following information:
  1563.           System name
  1564.           Author
  1565.           Current date and time
  1566.           Lines of code
  1567.           Number of programs, procedures, procedure files, indexes, and so forth
  1568.  
  1569.           Names of databases, indexes, report forms, label forms and memory
  1570.           files
  1571.  
  1572.      The system summary would ordinarily be the first page in the documentation. 
  1573.      It, together with the tree diagram, provides a basic overview of the entire
  1574.      system.  See Appendix A for an example.
  1575.  
  1576.      Tree Structure Diagram
  1577.  
  1578.      If you choose the default option of documenting all programs in the tree,
  1579.      SNAP! will produce a chart showing which programs call which other programs
  1580.      and which programs use which databases.  The tree diagram, like other SNAP!
  1581.  
  1582.                                           26
  1583.  
  1584.  
  1585.  
  1586.  
  1587.  
  1588.  
  1589.  
  1590.      reports, appears on the screen and is echoed to a file (default name of
  1591.      TREE.DOC).
  1592.  
  1593.      Any procedures or databases in the tree will be designated like this:
  1594.           Gee (procedure in procedure.file)
  1595.           Whiz (database ALIAS baz)
  1596.  
  1597.      SNAP! by default includes programs, procedures, functions, format files and
  1598.      databases in the tree. The Tree Screen includes options that allow you to
  1599.      put indexes, report forms, label forms and memory files in the tree also,
  1600.      or to suppress any of the default file types except program files.
  1601.  
  1602.      Note that the databases (and other non-program files) are shown underneath
  1603.      the programs that actually call them.  If a database is opened in one
  1604.      program and remains open in another program, SNAP! will show the database
  1605.      as called only by the first program file.
  1606.  
  1607.      SNAP! has some code to detect certain types of recursion and prevent the
  1608.      tree from marching off the right side of the page and eventually off the
  1609.      end of the world.  SNAP! catches programs that call themselves and programs
  1610.      that call another program that calls the original program again.  If the
  1611.      recursion is more subtle than that, SNAP! will eventually give up when
  1612.      recursion reaches 25 levels.  You will have become bored watching the
  1613.      display by that point.
  1614.  
  1615.      SNAP! detects calls to other programs, procedures and functions when they
  1616.      are in one of the following formats: 
  1617.           DO something
  1618.           SET KEY 300 TO something
  1619.           ON KEY 300 DO something
  1620.           ON KEY=300 DO something
  1621.           ON KEY DO something
  1622.           ON KEY LABEL keylabel DO something
  1623.           ON ESCAPE [or ERROR] DO something
  1624.           ON READERROR DO something
  1625.           ON SELECTION PAD ... DO something
  1626.           ON SELECTION POPUP ... DO something
  1627.           ON PAGE x AT LINE y DO something
  1628.           foo = something()    <---SNAP! detects other UDF calls also 
  1629.           CHAIN something
  1630.           SWITCH something
  1631.           SET FORMAT TO something
  1632.  
  1633.      Further, SNAP! detects calls to user defined functions in certain Clipper
  1634.      functions--MEMOEDIT, DBEDIT and ACHOICE.
  1635.  
  1636.      SNAP! searches through procedure files to generate a complete list of
  1637.      procedures and functions.  It identifies procedure files in the following
  1638.      ways:
  1639.           EXTERNAL procfile
  1640.           SET PROCEDURE TO procfile
  1641.           SET UDF TO procfile
  1642.  
  1643.                                           27
  1644.  
  1645.  
  1646.  
  1647.  
  1648.  
  1649.  
  1650.  
  1651.      Also, SNAP! will detect any procedures that are tacked on to the bottom of
  1652.      a PRG file, a coding style that Clipper allows.
  1653.  
  1654.      There are other "things" that sometimes act like programs.  For example,
  1655.      dBASE IV creates an FRG file whenever you use its report writer.  In
  1656.      reality, this file is a procedure file that contains code to produce the
  1657.      report.  SNAP! detects that an FRG file exists and shows it begin called
  1658.      from the program that initiates the report--the one that contains the
  1659.      REPORT FORM ... TO ... statement.  Similarly, label LBG files are also
  1660.      detected and documented.
  1661.  
  1662.      The tree report is illustrated in the Appendix.
  1663.  
  1664.  
  1665.      File List
  1666.  
  1667.      SNAP! can write a simple list of all files used in the system, including
  1668.      programs, databases, index files, and so on.  This report can be useful for
  1669.      identifying which files in a directory are associated with an application. 
  1670.      The file list can also be fed into the source code printing routines at a
  1671.      later point, so that the program files can be printed without going through
  1672.      a time-consuming complete documentation run again. 
  1673.  
  1674.      Database Summary
  1675.  
  1676.      The database summary report contains two parts: 1) the database structure
  1677.      for each database in the system and a list of programs which use it; and 2)
  1678.      a listing of each data field in the system and the databases that contain
  1679.      it.
  1680.  
  1681.      SNAP! tries to figure out which indexes, report forms and label forms are
  1682.      associated with each database.  It tracks the following statements:
  1683.           USE dbfname
  1684.           SELECT A (or B, C, etc. up through J)
  1685.           SELECT aliasname
  1686.           CLOSE DATABASES
  1687.           CLOSE ALL
  1688.           USE
  1689.      SNAP! knows how to account for macros in each of these constructions,
  1690.      assuming you have defined the macro.  For example, USE &temp will be
  1691.      interpreted to mean USE abcfile if you have previously defined &temp to
  1692.      mean abcfile (see section on SNAPMACRO statements for more details).
  1693.  
  1694.      SNAP! is reasonably good, but certainly not perfect, at figuring out which
  1695.      database is active at a particular spot in the code. There are, however,
  1696.      some limitations you should be aware of. First, SNAP! does not track
  1697.      databases or areas across program files or procedures.  Whenever SNAP!
  1698.      begins documenting a file, it assumes that no databases are in use and that
  1699.      area A is active.  Also, SNAP! does not try to interpret conditional
  1700.      structures.  For example, consider the following code: 
  1701.           IF .T.
  1702.                USE foo
  1703.  
  1704.                                           28
  1705.  
  1706.  
  1707.  
  1708.  
  1709.  
  1710.  
  1711.  
  1712.           ELSE
  1713.                USE bar
  1714.           ENDIF
  1715.  
  1716.      SNAP! looks at this code one line at a time.  The last USE statement it
  1717.      sees is 'USE bar'.  That statement will never actually be executed (because
  1718.      of the IF test), but SNAP! doesn't know that.  You may need to use SNAPCODE
  1719.      statements to help SNAP! figure out what is happening in cases such as this
  1720.      one.
  1721.  
  1722.      SNAP! identifies databases in these ways:
  1723.  
  1724.           1)   USE statements, but only those followed by a database name;
  1725.           2)   COPY TO statements, including COPY TO ... SDF.  If the command
  1726.                copies to an SDF file that does not have an explicit extension,
  1727.                SNAP! supplies .TXT. Otherwise SNAP! assumes databases to have
  1728.                .DBF extensions.
  1729.           3)   DELETE FILE xxx.DBF
  1730.           4)   CREATE foo FROM bar    (SNAP! picks up both foo and bar)
  1731.           5)   CREATE foo
  1732.           6)   COPY FILE foo.dbf TO bar.dbf
  1733.           7)   COPY STRUCTURE [EXTENDED] TO foo
  1734.           8)   SORT ON keyname TO foo
  1735.  
  1736.      A statement that tests for the existence of a database (e.g. IF
  1737.      FILE("xyz")) will not by itself be identified as a database reference. 
  1738.      Currently, SNAP! imposes an overall limit of 1,024 fields in the entire
  1739.      system.  If you exceed that number, SNAP! complains and does not include
  1740.      the excess fields in the database summary.
  1741.  
  1742.      A sample database summary report is included in appendix A.
  1743.  
  1744.  
  1745.      Index File Summary
  1746.  
  1747.      The index file summary lists each index file referenced in the system and
  1748.      attempts to show the fields it is indexed on and the files that use it.  It
  1749.      also shows multiple index files and their tags in a separate section of the
  1750.      report. 
  1751.  
  1752.      SNAP! first checks for an index file with the default extension you
  1753.      specified on the "Other Options" screen. If it cannot find a file with that
  1754.      extension, it tries to find one with an extension of NDX (the usual
  1755.      extension of dBASE II, dBASE III index files).  If it cannot find this
  1756.      file, it tries to find the same file name with an NTX extension (the usual
  1757.      extension of Clipper index files).  Failing that, it tries FoxBASE+/FoxPro
  1758.      IDX extensions.  If SNAP! cannot find one of those either, it gives up and
  1759.      reports that the NDX file could not be found.  If, however, it could find
  1760.      the Clipper or FoxBASE+/FoxPro file, it documents it appropriately.
  1761.  
  1762.  
  1763.  
  1764.  
  1765.                                           29
  1766.  
  1767.  
  1768.  
  1769.  
  1770.  
  1771.  
  1772.  
  1773.      SNAP! also shows the database associated with each index, if it could
  1774.      figure it out.  The database summary section of this documentation
  1775.      discusses the assumptions that SNAP! makes about which database is active.
  1776.  
  1777.      SNAP! identifies indexes in five ways:
  1778.  
  1779.           1)   INDEX ON xyz TO indexfile
  1780.           2)   USE xyz INDEX indexfile1,indexfile2,indexfile3 ...
  1781.           3)   SET INDEX TO indexfile1,indexfile2,indexfile3 ... 
  1782.           4)   DELETE FILE xyz.NDX
  1783.           5)   COPY FILE foo.ndx TO bar.ndx
  1784.  
  1785.      In cases 2 and 3, each index file will be separately identified and
  1786.      documented.
  1787.  
  1788.      A statement that tests for the existence of an index (e.g. IF
  1789.      FILE("xyz.NDX")) will not by itself be identified as an index reference.
  1790.  
  1791.      SNAP! identifies multiple index files (MDX files) in the following ways:
  1792.           1)   INDEX ON bar TAG foo OF xyz
  1793.           2)   USE xyz  (when XYZ.MDX exists)
  1794.           3)   SET INDEX TO xyz
  1795.           4)   COPY TAG foo OF xyz TO ndxname
  1796.  
  1797.      A sample index file summary in shown in the Appendix.
  1798.  
  1799.  
  1800.      Format File Summary
  1801.  
  1802.      SNAP! also produces a report showing each format file used in the system
  1803.      and the programs that call it.  A sample report is in the Appendix.
  1804.  
  1805.      SNAP! identifies format files in two ways:
  1806.  
  1807.           1) SET FORMAT TO xyz
  1808.           2) DELETE FILE xyz.FMT
  1809.  
  1810.      In case 1, if this is a dBASE II system, SET FORMAT TO SCREEN and SET
  1811.      FORMAT TO PRINT are not flagged as references to format files.
  1812.  
  1813.      A statement that tests for the existence of an format (e.g. IF
  1814.      FILE("xyz.FMT")) will not by itself be identified as an format reference.
  1815.  
  1816.  
  1817.      Report Form Summary
  1818.  
  1819.      SNAP! also produces a report showing each report form used in the system,
  1820.      the report parameters, and the programs that call it. For dBASE III,
  1821.      FoxBASE+ and Clipper systems, SNAP! shows a mock- up of each report and the
  1822.      expressions that go into each column. It also indicates which database is
  1823.      associated with the report form.
  1824.  
  1825.  
  1826.                                           30
  1827.  
  1828.  
  1829.  
  1830.  
  1831.  
  1832.  
  1833.  
  1834.      Documentation for dBASE IV and FoxPro report formats is simpler and does
  1835.      not include a mock-up of the report.  Documentation for both dBASE IV and
  1836.      FoxPro shows the fields or expressions that comprise the detail records. 
  1837.      Since both systems contain very sophisticated and elaborate report
  1838.      generators, it is not practical to summarize how the report looks, so SNAP!
  1839.      focuses on its contents.  You may wish to take a screen print of the report
  1840.      generator as additional documentation.  Also, apart from the documentation
  1841.      that SNAP! automatically produces, you may wish to retain a sample report
  1842.      printout.  Such a sample is probably a better indication of what the report
  1843.      does than the SNAP! documentation.
  1844.  
  1845.      A sample dBASE III report is in the Appendix.
  1846.  
  1847.      SNAP! identifies report forms in two ways:
  1848.  
  1849.           1)   REPORT FORM xyz ...
  1850.           2)   DELETE FILE xyz.FRM
  1851.  
  1852.      A statement that tests for the existence of an form (e.g. IF
  1853.      FILE("xyz.FRM")) will not by itself be identified as an report form
  1854.      reference.
  1855.  
  1856.  
  1857.      Label Form Summary
  1858.  
  1859.      The label form summary shows the parameters of each label form in the
  1860.      system.  It also indicates which database is associated with each label
  1861.      form.  A sample report is in the Appendix.
  1862.  
  1863.  
  1864.      Procedure File Summary
  1865.  
  1866.      SNAP! allows you to prepare a summary of files that contain procedures (see
  1867.      example in appendix A).  This summary shows the procedures in each
  1868.      procedure file and the programs and procedures that each one calls and is
  1869.      called by.  The report shows each procedure and function in the TopFile
  1870.      system.  SNAP! also reports the parameters expected by any procedures or
  1871.      functions that accept parameters.  Note that this report covers both
  1872.      procedure files and ordinary program files that also contain procedures (as
  1873.      Clipper allows).
  1874.  
  1875.  
  1876.      Other Summary Reports
  1877.  
  1878.      SNAP! also produces summary reports for the following additional file
  1879.      types:
  1880.           1) Memory files
  1881.           2) Binary (LOAD/CALL) files
  1882.           3) Other files
  1883.  
  1884.      Other files are generally text files that are specified in the following
  1885.      ways:
  1886.  
  1887.                                           31
  1888.  
  1889.  
  1890.  
  1891.  
  1892.  
  1893.  
  1894.  
  1895.           1) SET ALTERNATE TO xyz
  1896.           2) SET PRINTER TO xyz
  1897.           3) COPY MEMO to xyz
  1898.           4) APPEND MEMO FROM xyz
  1899.           5) COPY FILE xyz TO abc   <-- when SNAP! doesn't recognize the file
  1900.                                         extension
  1901.           6) TYPE xyz
  1902.  
  1903.      The other files summary report lists these files and shows which programs
  1904.      or procedures made a reference to the file.  I don't guarantee that the
  1905.      report will pick up every possible "other" file, but it seems to catch all
  1906.      of them in the sample code I use to test it.
  1907.  
  1908.  
  1909.      Variable Cross-Reference Report
  1910.  
  1911.      Another useful report available through SNAP! is a variable cross-reference
  1912.      listing, showing line numbers for each program that references a particular
  1913.      variable.  'Variable' in this context includes field names, file names and
  1914.      anything else that isn't a key word, numeric constant, punctuation mark or
  1915.      quoted string.
  1916.  
  1917.      If you elect to display the variable cross-reference report (by responding
  1918.      'Y' to the question on the options menu), you can view the Cross-reference
  1919.      Options Screen.  The Cross-reference Options Screen allows you to select
  1920.      the type of "things" that will included on the cross-reference report.  You
  1921.      will have the option to include only PUBLIC variables (this option has no
  1922.      meaning if this is a dBASE II system).  You also get the following choices:
  1923.  
  1924.           Include other variables and tokens
  1925.           Include key words
  1926.           Include numeric constants
  1927.  
  1928.      Your responses to these prompts (and your use of special characters in the
  1929.      key words file--see below) determine which words will appear on the
  1930.      cross-reference report.
  1931.  
  1932.      The cross-reference report adds certain codes to the end of a line number
  1933.      reference when the reference is particularly interesting.  SNAP! looks for
  1934.      the following statements to tell if a variable or field name (assume its
  1935.      name is 'abc') is interesting:
  1936.  
  1937.           Reference Type                                   Report Flag
  1938.           abc = 4                                                 *
  1939.           STORE 4 TO abc                                          *
  1940.           WAIT to abc                                             *
  1941.           @ 1,1 GET abc PICTURE "blah, blah"                      G
  1942.           ACCEPT "something" TO abc                               G
  1943.           INPUT abc                                               G
  1944.           REPLACE abc WITH something                              R
  1945.           RELEASE abc                                             x
  1946.           PUBLIC abc                                              P
  1947.  
  1948.                                           32
  1949.  
  1950.  
  1951.  
  1952.  
  1953.  
  1954.  
  1955.  
  1956.           PRIVATE abc                                             V
  1957.           LOCAL abc                                               V
  1958.           STATIC abc                                              V
  1959.           &abc                                                    &
  1960.           DECLARE abc[100]                                        A
  1961.           DIMENSION abc(100,200)                                  A
  1962.           USE abc [INDEX ...] [ALIAS ...]                         U
  1963.           DO foo WITH @abc                                        @
  1964.  
  1965.      As the following sample excerpt from the cross reference report
  1966.      illustrates, you can tell at a glance what is happening to the variables
  1967.      you are using:
  1968.  
  1969.      ABC
  1970.           TODO.PRG         30P   41    42    43G   44    45*   46G
  1971.           TDINPUT.PRG     123V  234*  235   237
  1972.           SETFILT.PRG      16    24    28    32
  1973.           TDEDIT.PRG      107*  133   134   135   136   138x
  1974.  
  1975.      This report shows that variable 'abc' was used in four programs (TODO,
  1976.      TDINPUT, SETFILT and TDEDIT).  Within TODO, it was declared a PUBLIC
  1977.      variable on line 30; referenced but not changed on lines 41, 42 and 44;
  1978.      used in a GET statement on lines 43 and 46; modified in line 45; and
  1979.      released on line 72.  TDINPUT declared it to be PRIVATE (line 123),
  1980.      assigned it a value in line 234, then referred to it in lines 235 and 237.
  1981.  
  1982.      A legend to explain all these flags is printed at the top of each
  1983.      cross-reference report, so you do not need to remember what they all mean.
  1984.  
  1985.      SNAP! will not flag a 'RELEASE ALL' statement as a reference, nor will it
  1986.      figure out that a 'RESTORE FROM xyz.mem' may overwrite other variables. 
  1987.      Neither of these statements will generate a cross-reference listing for any
  1988.      variables (though xyz.mem will be referenced).  Of course, you can have
  1989.      SNAP! cross-reference the RELEASE and RESTORE statements themselves.
  1990.  
  1991.      By default, references to a database field prefaced by the alias (e.g.,
  1992.      foo->bar) will be shown as one token in the cross reference file.  If you
  1993.      do not like this convention, the /C command line option turns it off, so
  1994.      that foo and bar will be referenced separately.
  1995.  
  1996.      At the bottom of the report, SNAP! produces a list of public variables, a
  1997.      list of macros and a list of arrays.  The macro list is subdivided into
  1998.      macros that you defined to SNAP! and those you didn't.  If you defined a
  1999.      macro, its definition is also shown.
  2000.  
  2001.      A new option introduced in SNAP! 5.0 is the local cross reference report,
  2002.      so called because it is "local" to a particular program or procedure file--
  2003.      all variables and references in that a file are stored together in the
  2004.      local cross reference report, and are not merged together with all such
  2005.      references throughout the program system as is usual.  This report is
  2006.      generally less useful than the default global cross reference (which is
  2007.      what you are used to if you've been using SNAP! in the past).  It does have
  2008.  
  2009.                                           33
  2010.  
  2011.  
  2012.  
  2013.  
  2014.  
  2015.  
  2016.  
  2017.      the singular benefit of using almost no memory, however, so you can
  2018.      document much larger systems if you elect to create a local cross
  2019.      reference.  The local cross reference report and the global cross reference
  2020.      are mutually exclusive.  You chose to create a local cross reference on the
  2021.      cross reference options screen.
  2022.  
  2023.      Another technique for documenting a large system is to split your system
  2024.      into several smaller parts and document them separately.  Should you choose
  2025.      to do so, you might want to explore a program written by Charles S.
  2026.      Galloway called SNAP! XRef Merger that merges multiple cross references
  2027.      reports into a single consolidated report.  It is a nice piece of work.  It
  2028.      is available directly from Mr. Galloway at 3211 Burns Place, Raleigh, NC
  2029.      27609.  He will send you a copy if you send him a stamped mailer and a
  2030.      formatted diskette.
  2031.  
  2032.      The cross-reference report interacts closely with the key word file. 
  2033.      Specifically, the key word file is how SNAP! can tell what is a key word
  2034.      and what is not.  Additionally, by inserting the correct characters in the
  2035.      key word file, you can cause certain key words or variables to be handled
  2036.      differently than usual.  The following characters have a special meaning in
  2037.      the key word file when inserted immediately before a word:
  2038.  
  2039.           *    Comments out the word.  SNAP! acts as if it were not in the key
  2040.                word file at all.
  2041.  
  2042.           !    Capitalize, but do no cross-reference even when the option to
  2043.                cross-reference key words is in effect.  You may want to use this
  2044.                character for often-used but uninteresting key words such as TO
  2045.                or, perhaps, SAY.
  2046.  
  2047.           @    Capitalize and always cross-reference this word, even when the
  2048.                option to cross-reference key words is not in effect.  You might
  2049.                want to use this for especially important key words such REPLACE,
  2050.                SAVE, or QUIT.
  2051.  
  2052.           %    Neither capitalize nor cross-reference, regardless of whether the
  2053.                options to capitalize or cross-reference key words are in effect. 
  2054.                You may want to use this character to designate variables that
  2055.                you use frequently, but that you are not interested in
  2056.                cross-referencing--perhaps "i", "choice", "action", or "lineno".
  2057.  
  2058.           ()   If the *last* two characters in a key word are (), the key word
  2059.                will ordinarily have an initial capital letter in the formatted
  2060.                output.  The DB3WORDS.SNP file that comes with SNAP! uses this
  2061.                notation to designate the Tom Rettig key words (Tom Rettig is the
  2062.                author of a popular set of functions for dBASE III and Clipper).
  2063.  
  2064.      The following examples illustrate how to use these special characters:
  2065.  
  2066.           *note      --  This word will be ignored.
  2067.           !SAY       --  Capitalize, but do not cross-reference, SAY.
  2068.           @REPLACE   --  Include REPLACE in the cross-reference report.
  2069.  
  2070.                                           34
  2071.  
  2072.  
  2073.  
  2074.  
  2075.  
  2076.  
  2077.  
  2078.           %CHOICE    --  Do not capitalize or cross-reference this word.
  2079.           Alltrim()  --  This word is a function.  The first letter will be
  2080.                          capitalized.
  2081.  
  2082.      If this is a dBASE III or dBASE IV system, SNAP! allows you to restrict the
  2083.      cross-referencing to PUBLIC variables.  If you select this option, SNAP!
  2084.      only puts public variables on the report.  However, SNAP! does not look for
  2085.      PRIVATE statements that redefine the variable, so if a variable is declared
  2086.      PUBLIC anywhere in the system, SNAP! documents all subsequent occurrences
  2087.      of it.  Note that SNAP! does not "backtrack" to see if the variable was
  2088.      referenced before it was defined as PUBLIC.
  2089.  
  2090.      I have done my best to identify key words used in dBASE, FoxBASE, FoxPro
  2091.      and Clipper, but I may have missed some.  Fortunately, the DBxWORDS.SNP
  2092.      file is a standard ASCII file that you can edit with most any word
  2093.      processor. So, if I have omitted one of your favorite key words, it is a
  2094.      simple matter to add it to the file. Function names from other third-party
  2095.      libraries are also included, but you may also want to add function names
  2096.      from other development tools.
  2097.  
  2098.      A sample cross-reference report is included in the Appendix.
  2099.  
  2100.  
  2101.      LNK and MAKE files
  2102.  
  2103.      These options will be useful only to developers of Clipper-compiled
  2104.      applications.  If you are using interpretive dBASE III, dBASE IV or FoxPro
  2105.      you can ignore this section.
  2106.  
  2107.      Link Files.  SNAP! can produce a link file for PLINK86 (which comes with
  2108.      Clipper), TLINK (part of the Borland Turbo C package), and the Microsoft
  2109.      LINK utility.  If you are a serious Clipper programmer, the TLINK linker
  2110.      justifies the cost of the Turbo C package (less than $100)--it is that
  2111.      fast.  I have seen some informal benchmarks that show it linking
  2112.      applications as much as eight times faster than PLINK86.  
  2113.  
  2114.      PLINK86 will accept "commands" from a LNK file.  This file typically
  2115.      contains a series of commands for the linker, telling the linker such
  2116.      things as which libraries to search and in what order.  SNAP! will produce
  2117.      a LNK file if you select the appropriate option.  This LNK file will
  2118.      contain a list of all the files in your system.
  2119.  
  2120.      If you have a file named LINK.SNP in your source directory, SNAP! will put
  2121.      it at the top of the LNK file.  For example, you might put a list of
  2122.      libraries in this file.  You can also use a name other than 'LINK.SNP' by
  2123.      specifying /Lfilename on the command line.
  2124.  
  2125.      Make Files.  SNAP! can produce the files for the Clipper MAKE utility
  2126.      (Summer 87 version only) and for the Shareware NDMAKE program.
  2127.  
  2128.      MAKE is a standard UNIX (tm) utility, versions of which are now also
  2129.      available for MS-DOS.  MAKE allows you to define which files "depend" on
  2130.  
  2131.                                           35
  2132.  
  2133.  
  2134.  
  2135.  
  2136.  
  2137.  
  2138.  
  2139.      other files and only compile files that have changed. For example, in a
  2140.      Clipper application using MAKE, you would typically have one OBJ file for
  2141.      each PRG file.  Each OBJ file "depends" on the corresponding PRG file since
  2142.      the OBJ file needs to be remade when the PRG file changes.  In other words,
  2143.      when a change is made to a program file, it needs to be recompiled to
  2144.      create a new object file.  Similarly, the EXE file "depends" on all of the
  2145.      object files that are linked together to create it.
  2146.  
  2147.      MAKE allows you to specify these dependencies and perform the fewest
  2148.      recompiles to completely update your system for all program changes. It can
  2149.      save an enormous amount of time on the edit-compile-link-run cycle for a
  2150.      large system development.
  2151.  
  2152.      NDMAKE use three files--the MAKE.EXE file itself, a MAKE.INI file that
  2153.      specifies certain defaults, and a file named MAKEFILE that contains the
  2154.      dependencies for your system.  SNAP! can create the MAKEFILE.  It is up to
  2155.      you to deal with MAKE.INI.  In particular, you will need to add a default
  2156.      rule to your MAKE.INI file to tell MAKE how to compile a PRG file into an
  2157.      OBJ file.  Its syntax is:
  2158.  
  2159.      # To produce a `.obj' file from a `.prg' file using Clipper.
  2160.           .prg.obj:; clipper $< -m
  2161.  
  2162.      This definition should work with most versions of MAKE.  If you use a
  2163.      different MAKE utility, you may need to use slightly different syntax here. 
  2164.      Check your documentation to be sure.
  2165.  
  2166.      The SNAP! MAKE option works hand-in-hand with the LNK option.  If you ask
  2167.      SNAP! to create a LNK file, SNAP! will use the same file name when it
  2168.      create MAKEFILE.
  2169.  
  2170.      The net effect of all of this is that you can issue the command:
  2171.  
  2172.           MAKE filename   (where filename is the name of your TopFile)
  2173.  
  2174.      and MAKE will figure out what needs to be recompiled and linked to create
  2175.      your system.
  2176.  
  2177.      Sample LNK and MAKEFILE listings are included in appendix A.
  2178.  
  2179.  
  2180.      Batch Files
  2181.  
  2182.      SNAP! also produces DOS batch files to do useful things.  One file, named
  2183.      UPDATE.BAT, will copy all program files from the SNAP! output directory to
  2184.      the original source directory.  You could use it to copy the new
  2185.      (documented) versions of your source files over the original (undocumented)
  2186.      source files.  The syntax for UPDATE is:
  2187.  
  2188.           UPDATE d:
  2189.  
  2190.  
  2191.  
  2192.                                           36
  2193.  
  2194.  
  2195.  
  2196.  
  2197.  
  2198.  
  2199.  
  2200.      where d: is a drive or directory name.  If it is omitted, the original
  2201.      source directory is assumed.  Be careful with this file since it overwrites
  2202.      the original source code files.  You should backup your original files and
  2203.      review the new output files before executing UPDATE.  No kidding.  This is
  2204.      important.
  2205.  
  2206.      BACKPRG backs up the programs, format files and report forms in your
  2207.      system.  Its syntax is:
  2208.  
  2209.           BACKPRG d:
  2210.  
  2211.      d: is a drive or directory name and is required.  If you do not specify a
  2212.      target drive or directory, the batch file will complain and stop.
  2213.  
  2214.      BACKDBF backs up the databases, index files and memory files in your
  2215.      system.  Its syntax is:
  2216.  
  2217.           BACKDBF d:
  2218.  
  2219.      d: is a drive or directory name and is required.  If you do not specify a
  2220.      target drive or directory, the batch file will complain and stop.
  2221.  
  2222.      Macros are suppressed from this file.
  2223.  
  2224.      Also, SNAP! creates the PRINTDOC.BAT file to send all documentation files
  2225.      (not including source code or action diagrams) to the printer. PRINTDOC
  2226.      calls the DOS PRINT utility for background printing.  Thus, PRINT must be
  2227.      available somewhere on the path.
  2228.  
  2229.  
  2230.      Action Diagrams
  2231.  
  2232.      An action diagram documents the structure of a program by using graphical
  2233.      symbols to group related statements together.  By default, SNAP! uses the
  2234.      IBM extended ASCII characters in the action diagrams it prepares.
  2235.  
  2236.  
  2237.  
  2238.  
  2239.  
  2240.  
  2241.  
  2242.  
  2243.  
  2244.  
  2245.  
  2246.  
  2247.  
  2248.  
  2249.  
  2250.  
  2251.  
  2252.  
  2253.                                           37
  2254.  
  2255.  
  2256.  
  2257.  
  2258.  
  2259.  
  2260.  
  2261.      A portion of a sample action diagram follows:
  2262.  
  2263.  
  2264.      ┌─IF s_clipper .AND. s0_filt = 7
  2265.      │  ╔═DO WHILE .NOT. s0_userfilt
  2266.      │  ║    SKIP
  2267.      │  ║  ┌─IF EOF()
  2268.      │  ║  │    GOTO TOP
  2269.      │  ║  │  ╔═DO WHILE .NOT. &s0_userfilt
  2270.      │  ║  │  ║    SKIP
  2271.      │  ║  │  ║  ┌─IF EOF()
  2272.      │  ║  │  ║  │    SET FILTER TO
  2273.      │  ║  │  ║  │    s0_userfilt = "1=1"
  2274.      │  ║  │  ║  │    GOTO TOP
  2275.      │  ║  │  ^═══════LOOP
  2276.      │  ║  │  ║  │  ┌─IF Dusty Day In The Lake
  2277.      │  ║  │  ║  │  │    ? "Yell and Scream"
  2278.      <═══════════════════RETURN
  2279.      │  ║  │  ║  │  └─ENDIF
  2280.      │  ║  │  ║  └─ENDIF
  2281.      │  ║  │  ╚═ENDDO
  2282.      │  ║  │  ╒═DO CASE
  2283.      │  ║  │  ╞═CASE lastkey() = 4
  2284.      │  ║  │  │    choice = "F"
  2285.      │  ║  │  ╞═CASE lastkey() = 19
  2286.      │  ║  │  │    choice ="B"
  2287.      │  ║  │  ╘═ENDCASE
  2288.      │  ║  └─ENDIF
  2289.      │  ╚═ENDDO
  2290.      │  ╓─FOR i = 1 TO 25
  2291.      │  ║    DO sample1
  2292.      │  ╙─NEXT
  2293.      └─ENDIF
  2294.  
  2295.      As this example shows, different extended ASCII characters are used to
  2296.      differentiate different control structures.  Loops (DO WHILE, FOR, SCAN)
  2297.      use the double-line vertical bar, while conditional statements (IF, DO
  2298.      CASE) use a single vertical bar.
  2299.  
  2300.      The structures are distinguished further by the horizontal symbol used to
  2301.      connect the control structure key word with the vertical bar.
  2302.  
  2303.      Note also that these diagrams allow you to identify "unusual" loop exits
  2304.      such as LOOP and RETURN very easily.  I can often identify subtle,
  2305.      difficult-to-locate bugs by studying the action diagram for the program.
  2306.  
  2307.      SNAP! will identify certain syntax errors (such as a LOOP statement that is
  2308.      not within a DO WHILE loop) only if you choose to prepare action diagrams. 
  2309.      Certain error checking is only performed within this module.
  2310.  
  2311.      The Format screen allows you to choose whether to write action diagrams or
  2312.      not.  It also allows you to specify the extension that action diagram files
  2313.  
  2314.                                           38
  2315.  
  2316.  
  2317.  
  2318.  
  2319.  
  2320.  
  2321.  
  2322.      will have.  Action diagrams always have the same main file name (i.e, the
  2323.      first eight characters) as the source code file from which it is drawn, but
  2324.      the extension can be anything you specify except '.PRG'.  You can use the
  2325.      '?' character as a wildcard to match the corresponding characters in the
  2326.      original file extension.  Therefore, if you choose an action file extension
  2327.      of'??T', and your original source file was named FOO.BAR, the action
  2328.      diagram file will be named FOO.BAT (the BA is drawn from the original
  2329.      filename, and the T comes from the action diagram file mask).
  2330.  
  2331.      Action diagram files are very much like program files and have the same
  2332.      capitalization as the output program files do.  However, action diagram
  2333.      files are not directly executable or compilable because of the additional
  2334.      line-drawing characters they contain.
  2335.  
  2336.      Some printers (most Epson models, for example) do not support the IBM
  2337.      graphics characters very well.  If you want to print action diagrams, you
  2338.      may want to use other characters for the connections.  You can choose to
  2339.      prepare action diagrams using only ASCII symbols by choosing the ASCII
  2340.      symbol option on the source code and action diagram options screen.
  2341.  
  2342.      You can also choose your own action diagram symbols on the 'SourceCode and
  2343.      Action Diagram Options' screen.  The following chart shows how to customize
  2344.      the symbols:
  2345.  
  2346.         Default symbols: ─│┌└├═║╔╚^v═│╒╘╞─║╓╙<═
  2347.  
  2348.                Position: 0000000001111111111222
  2349.                          1234567890123456789012
  2350.  
  2351.                Position                              Symbol
  2352.                -------- -----------------------------------------------------
  2353.                    1      Horizontal symbol used for IF/ELSE/ENDIF structures
  2354.                    2      Vertical symbol used for IF/ELSE/ENDIF structures
  2355.                    3      Corner for IF and BEGIN SEQUENCE (Clipper only)
  2356.                    4      Corner for ENDIF and END (Clipper only)
  2357.                    5      Join symbol for ELSE
  2358.                    6      Horizontal symbol used for DO WHILE/ENDDO structures
  2359.                    7      Vertical symbol used for DO WHILE/ENDDO structures
  2360.                    8      Corner for DO WHILE
  2361.                    9      Corner for ENDDO
  2362.                   10      Symbol for LOOP
  2363.                   11      Symbol for EXIT and BREAK (Clipper only)
  2364.                   12      Horizontal symbol used for DO CASE/OTHERWISE/ENDCASE
  2365.                           structures
  2366.                   13      Vertical symbol used for DO CASE/OTHERWISE/ENDCASE
  2367.                           structures
  2368.                   14      Corner for DO CASE
  2369.                   15      Corner for ENDCASE
  2370.                   16      Join symbol for CASE and OTHERWISE
  2371.                   17      Horizontal symbol used for FOR/NEXT structures
  2372.                   18      Vertical symbol used for FOR/NEXT structures
  2373.                   19      Corner for FOR
  2374.  
  2375.                                              39
  2376.  
  2377.  
  2378.  
  2379.  
  2380.  
  2381.  
  2382.  
  2383.                   20      Corner for NEXT
  2384.                   21      Arrow symbol for RETURN/CANCEL/QUIT
  2385.                   22      Horizontal symbol used for RETURN/QUIT/LOOP/EXIT
  2386.  
  2387.      You can replace any of these symbols with others of your choosing. If you
  2388.      want to restore the default set, simply select 'G' for graphics characters,
  2389.      move to another input screen, then come back again (in simpler terms,
  2390.      select 'G', press Ctrl-PgDn then Ctrl-PgUp). These symbols are reset when
  2391.      the 'Source Code and Action Diagrams Options' screen is presented.  One
  2392.      consequence is that you must answer 'O' (for Other Symbols) to be able to
  2393.      change the action diagram symbols. If you answer 'G', then change the
  2394.      symbols, the changes will not take effect.  Like other input fields, any
  2395.      user-defined symbols will be saved in the configuration file so you do not
  2396.      have to enter them at each invocation of SNAP!
  2397.  
  2398.      The SCAN/ENDSCAN control structure is documented with the same symbols as
  2399.      the DO WHILE loop.  The BEGIN SEQUENCE/BREAK/END control structure is
  2400.      diagrammed with the same symbols as an IF/ENDIF structure.
  2401.  
  2402.  
  2403.      Source Code Printout
  2404.  
  2405.      When you have completed your program, you will probably want a listing of
  2406.      the source code to accompany the rest of your documentation.  SNAP!
  2407.      provides a facility for formatting and printing dBASE source code files
  2408.      and/or action diagrams, and gives you a great deal of control over source
  2409.      code format.  You can set the following parameters:
  2410.  
  2411.           Line width
  2412.           Page length
  2413.           Left and right margins
  2414.           Top and bottom margins
  2415.           Spaces per tab
  2416.           Include or suppress line numbers
  2417.           Printer setup string
  2418.  
  2419.      For example, you can set these values to leave plenty of room on the left
  2420.      side of the page so that your code will fit in a 3-ring binder.
  2421.  
  2422.      If a line of code exceeds the line width minus left and right margins,
  2423.      SNAP! will wrap it on the printout without messing up the page breaks. 
  2424.      SNAP! also appropriately counts the wrapped line as one source code line,
  2425.      so that your cross-reference report still matches the printout.
  2426.  
  2427.      Each page of the printout contains a header showing the program name,
  2428.      system name, copyright notice, page number and date/time printed.  The
  2429.      programs are printed in alphabetical order.
  2430.  
  2431.      Line numbers are never added to an action diagram at print time. If you
  2432.      would like action diagrams to be printed with line numbers, choose the
  2433.      option on the format screen to add the line numbers directly to the action
  2434.      diagram file.  This is the default choice, so you ordinarily get action
  2435.  
  2436.                                           40
  2437.  
  2438.  
  2439.  
  2440.  
  2441.  
  2442.  
  2443.  
  2444.      diagrams (and printouts) with line numbers.  The restriction on adding line
  2445.      numbers at print time prevents duplicate line numbers from being printed.
  2446.  
  2447.      The print section of SNAP! deals harshly with nonsense. For example, if the
  2448.      sum of your left and right margins exceeds your line width, SNAP! will set
  2449.      the line width and the margins to their default values.  Similarly, SNAP!
  2450.      will reject top and bottom margins greater than page length, negative
  2451.      values, tab expansions greater than 12 spaces, and so on.
  2452.  
  2453.      SNAP! prints a three-line heading on each page of the printout, showing
  2454.      program name, system name, copyright holder, date, time, and page number. 
  2455.      The heading begins on the line immediately following the top margin you
  2456.      specify.  Accordingly, if you use a top margin of 8 and a bottom margin of
  2457.      8, with 66-line paper only 47 lines of code will be printed on each page 
  2458.      (66 lines - 8 top margin - 8 bottom margin - 3 heading).
  2459.  
  2460.      For those of you with HP LaserJet II printers, try the following
  2461.      parameters:
  2462.           Line width:  132             Page length:   80
  2463.           Top margin:    4             Bottom margin:  4
  2464.           Left margin:   8             Right margin:   1
  2465.  
  2466.      Setup string: \027E\027&l0o8D\027(10U\027(s16.6H
  2467.  
  2468.      The \027E at the beginning of the string resets the printer.  These
  2469.      parameters are stored in the printer definition file (see below for more
  2470.      details) and you do not have to type them in yourself.
  2471.  
  2472.      SNAP! allows you to enter a setup string to configure the printer for SNAP!
  2473.      (see above) and also a reset string to configure the printer after SNAP!
  2474.      has completed printing.  You would not ordinarily need to enter a reset
  2475.      string, but you might enter one if you wanted SNAP! to leave the printer
  2476.      configured in a particular way.
  2477.  
  2478.      When you are in the print options screen, you can press "F2--List" to
  2479.      display a scrollable list of printer defaults.  If you select one of the
  2480.      printers shown, the choices associated with it are used to update the print
  2481.      options parameters, such as setup string, line width, page length and so
  2482.      forth.  This feature means that you don't have to remember complicated
  2483.      control strings.  You can define them in the print options file and select
  2484.      them from the list.
  2485.  
  2486.      The printer options are stored in SNAPPRT.SNP.  It is an ASCII file that
  2487.      you can edit to add more printer definitions.  Descriptions for how to add
  2488.      a printer are included at the top of SNAPPRT.SNP itself.
  2489.  
  2490.      You can force a page break by including the *# SNAP FORMFEED directive at
  2491.      the point in your source code where you would like a new page to start. 
  2492.      You could also just embed a CHR(12) character in the file, but SNAP! will
  2493.      keep the page numbers straight if you use the "*# SNAP FORMFEED" approach. 
  2494.      Note that the formfeed directive itself is not printed.
  2495.  
  2496.  
  2497.                                           41
  2498.  
  2499.  
  2500.  
  2501.  
  2502.  
  2503.  
  2504.  
  2505.      By default, SNAP! prints to LPT1:  You can direct output to a different
  2506.      port or to a disk file by using the /P command line switch.  For example,
  2507.           SNAP /PLPT2:
  2508.      sends output to LPT2:
  2509.           SNAP /Pmyfile.txt
  2510.      sends output to a file named "myfile.txt".  If you are printing over a
  2511.      network, you may need to relax the timing conventions that SNAP! uses to
  2512.      tell that the printer is working correctly.  If you see timeout or "printer
  2513.      not ready" messages, try this:
  2514.           SNAP /PLPT1:(NET)
  2515.       
  2516.  
  2517.      Printing Without Documenting (Reprinting)
  2518.  
  2519.      You can use the source code printing facilities of SNAP! without going
  2520.      through the full time-consuming documentation process.  If you press the
  2521.      "F9--Print Now" key while viewing the Print screen, SNAP! will prompt you
  2522.      for a filename containing the names of files to print. SNAP! searches the
  2523.      file you name and prints the contents of the files listed therein.  SNAP!
  2524.      will not print a file with an extension of MEM, FRM, DBF, NDX, NTX, IDX,
  2525.      MDX, EXE, COM and other common non-ASCII X-Base names.  Also, SNAP! tries
  2526.      to figure out if a particular file is not an ASCII file and warn you about
  2527.      it before printing.
  2528.  
  2529.      SNAP! will not try to print from anything that isn't a filename, so the
  2530.      file you specify can contain all sorts of garbage without causing a
  2531.      problem.  The main effect of all this is that you can give the Print
  2532.      routines the name of a SNAP! REPRINT.DOC file and it will print all the
  2533.      source code in the system without going through the full SNAP!
  2534.      documentation process again.  Of course, you can create your own file
  2535.      containing filenames to print also.  You can also use this feature (and the
  2536.      DOCLIST.DOC file--just like REPRINT.DOC except it holds the names of
  2537.      documentation files instead of source code files) to print documentation
  2538.      files in a nicely formatted way.
  2539.  
  2540.  
  2541.  
  2542.  
  2543.  
  2544.  
  2545.  
  2546.  
  2547.  
  2548.  
  2549.  
  2550.  
  2551.  
  2552.  
  2553.  
  2554.  
  2555.  
  2556.  
  2557.  
  2558.                                           42
  2559.  
  2560.  
  2561.  
  2562.  
  2563.  
  2564.  
  2565.  
  2566.  
  2567.                           Using SNAP! in a Batch Environment
  2568.  
  2569.      If you have several systems to document, you may wish to set up a batch
  2570.      file to invoke SNAP! with the appropriate parameters for each system so
  2571.      that you can come back in a week or two and find all your programs
  2572.      beautifully documented.  SNAP! supports Immediate Mode for batch
  2573.      documentation through the /X switch on the command line.  Used in
  2574.      conjunction with named configuration and macro files, you can sequentially
  2575.      document a series of dBASE systems.  SNAP! will take its input from the
  2576.      configuration files (or from CONFIG.SNP if no configuration file is named)
  2577.      and begin documenting the system immediately.  Note that you have to have
  2578.      your configuration file ready before you invoke the system.  If you do not
  2579.      specify a configuration file, SNAP! tries to use CONFIG.SNP in the current
  2580.      directory.
  2581.  
  2582.      For example, to document three dBASE systems without pausing for user
  2583.      input, set up a batch file with these lines:
  2584.  
  2585.           SNAP /x /fsystem1.snp
  2586.           SNAP /x /fsystem2.snp
  2587.           SNAP /x
  2588.  
  2589.      SNAP! will document the first system and take input from the SYSTEM1.SNP
  2590.      configuration file.  Then, without prompting for further user action, it
  2591.      will read SYSTEM2.SNP and begin documenting the second system.  Input for
  2592.      the third system is in the CONFIG.SNP (default name) file.  When the batch
  2593.      file is invoked, SNAP! will begin documenting and will not pause for user
  2594.      input at any point in the process.
  2595.  
  2596.      If an error occurs anywhere during the processing of these three systems,
  2597.      SNAP! will display an error message and stop documenting the system that
  2598.      experienced the error.  The batch file, however, will continue running and
  2599.      will move on to the next system to be documented.
  2600.  
  2601.  
  2602.  
  2603.  
  2604.  
  2605.  
  2606.  
  2607.  
  2608.  
  2609.  
  2610.  
  2611.  
  2612.  
  2613.  
  2614.  
  2615.  
  2616.  
  2617.  
  2618.  
  2619.                                           43
  2620.  
  2621.  
  2622.  
  2623.  
  2624.  
  2625.  
  2626.  
  2627.                                      Random Notes
  2628.  
  2629.      These are some other thoughts that don't seem to fit anywhere else.
  2630.  
  2631.      If you have a file named HELP.PRG in the program directory, SNAP! assumes
  2632.      this must be a Clipper system, where 'HELP' is a magic name and documents
  2633.      the program accordingly.  SNAP! treats HELP.PRG as if it were called
  2634.      directly from TopFile.
  2635.  
  2636.  
  2637.  
  2638.  
  2639.  
  2640.  
  2641.  
  2642.  
  2643.  
  2644.  
  2645.  
  2646.  
  2647.  
  2648.  
  2649.  
  2650.  
  2651.  
  2652.  
  2653.  
  2654.  
  2655.  
  2656.  
  2657.  
  2658.  
  2659.  
  2660.  
  2661.  
  2662.  
  2663.  
  2664.  
  2665.  
  2666.  
  2667.  
  2668.  
  2669.  
  2670.  
  2671.  
  2672.  
  2673.  
  2674.  
  2675.  
  2676.  
  2677.  
  2678.  
  2679.  
  2680.                                           44
  2681.  
  2682.  
  2683.  
  2684.  
  2685.  
  2686.  
  2687.  
  2688.                                  Program Limitations
  2689.                              and Things To Watch Out For
  2690.  
  2691.      SNAP! had the following design limitations when this documentation was
  2692.      written:
  2693.  
  2694.      Maximum program files:             1024 programs, procedures and functions
  2695.      Maximum other files:                128 of each type (e.g.databases)
  2696.      Maximum variables:                 2500 throughout the system
  2697.      Maximum key words:                 1600 words
  2698.      Maximum length of key word:          15 characters
  2699.      Maximum length of a token:           20 characters
  2700.      Maximum levels of program nesting:   20  levels
  2701.      Maximum number of database fields: 2048 throughout the system
  2702.      Maximum length of filename:          67 characters (including path)
  2703.  
  2704.      These limitations were current when this documentation was written.  You
  2705.      can verify them (it would be a good idea) by viewing the program
  2706.      limitations screen (Press F1 three times from the greeting screen).
  2707.  
  2708.      SNAP! uses about 210K of memory as "overhead."  This much is used as soon
  2709.      as the program is invoked.  It also allocates additional memory dynamically
  2710.      as it is needed.  It is a memory hog and will probably not be of much use
  2711.      if you don't have 640K.  SNAP! will put its overlay file into expanded
  2712.      memory (if enough is available) to speed things up, but will not otherwise
  2713.      take advantage of any memory above 640K.  I hope to change this in the
  2714.      future.
  2715.  
  2716.      SNAP! does not format FoxPro 2.0 code snippets.  Use the SNIPFMT program
  2717.      that accompanies FoxPro 2.0 for that.  It also does not document
  2718.      Clipper 5.0 code blocks.
  2719.  
  2720.  
  2721.      Legal Coding that is Prohibited by SNAP!
  2722.  
  2723.      I make no promises about what will happen if you run SNAP! against invalid
  2724.      X-Base syntax, but predict that the results will not be satisfying.  On the
  2725.      other hand, there are some "legal" coding techniques for X-Base that cause
  2726.      problems with SNAP!.  I have tried to keep these to a minimum, but some yet
  2727.      remain.
  2728.  
  2729.      You cannot use the word "END" as a variable in an assignment statement of
  2730.      the form:
  2731.           END = foo.
  2732.      SNAP! sees the 'END' (which is a valid control structure terminator in
  2733.      Clipper), treats anything else on the line as a comment, and becomes
  2734.      powerfully confused.  Using "END" in a: 
  2735.           STORE foo TO end
  2736.      statement is acceptable.  You also cannot use PROCEDURE or FUNCTION (or a
  2737.      valid abbreviation of either) as a variable name.
  2738.  
  2739.  
  2740.  
  2741.                                           45
  2742.  
  2743.  
  2744.  
  2745.  
  2746.  
  2747.  
  2748.  
  2749.      SNAP! does not track control structures across program or procedure
  2750.      boundaries.  Normally, this is not a problem since you cannot start a DO
  2751.      WHILE loop in one program and finish it in another.  However, a BREAK
  2752.      statement can be in one program, while the loop it is breaking out of is in
  2753.      another file.  Thus, SNAP! does not report an error when it sees a BREAK
  2754.      statement, even if it cannot tell whether there is a loop for the BREAK to
  2755.      apply to.
  2756.  
  2757.      Hyphens in Filenames
  2758.  
  2759.      SNAP! uses treats a hyphen as a delimiter when it is scanning your source
  2760.      code to prepare the cross-reference report, since the hyphen usually means
  2761.      "subtract."  Thus, foo = bar-baz will correctly generate three
  2762.      cross-references--one for "foo", one for "bar" and one for "baz".  This
  2763.      technique breaks down when SNAP! sees "DO foo-bar."  In this case, both
  2764.      "foo" and "bar" will be cross-referenced.  Note that SNAP! will find the
  2765.      right file and continue documenting--it is only the cross-reference report
  2766.      that is misleading.
  2767.  
  2768.  
  2769.      Multiple Procedure Files
  2770.  
  2771.      If you use multiple procedure files and if they contain procedures that
  2772.      have the same name, SNAP! may document your system incorrectly.  SNAP! 5.0
  2773.      should be much better than previous versions about keeping these files
  2774.      straight, but it is probably still possible to confuse SNAP!.  
  2775.  
  2776.      For example, assume you have two procedure files that are SET at different
  2777.      points in the system.  Both files contain a procedure called FOO, but FOO
  2778.      is not the same in each file.  When SNAP! searches for procedures, it will
  2779.      always find the first FOO and assume it is the one being called.  SNAP!
  2780.      does not track which procedure file is currently active and cannot
  2781.      distinguish between identically-named procedures in different procedure
  2782.      files.  This limitation has no effect on systems that use only one
  2783.      procedure file, or on systems that have multiple procedure files each
  2784.      containing uniquely-named procedures.
  2785.  
  2786.      Giving different things the same name (this is my other brother Daryl) is a
  2787.      bad programming habit to get into.  It is a good idea to use unique names
  2788.      for each procedure, function, procedure file and program.
  2789.  
  2790.  
  2791.      Suppressing Color
  2792.  
  2793.      If you do not like the colors I selected, or if they do not display
  2794.      properly on your monitor, putting the "/BW" switch on the command line will
  2795.      disable color.
  2796.  
  2797.  
  2798.  
  2799.  
  2800.  
  2801.  
  2802.                                           46
  2803.  
  2804.  
  2805.  
  2806.  
  2807.  
  2808.  
  2809.  
  2810.                                     Change History
  2811.  
  2812.      SNAP! has undergone several major changes.  The following list is not
  2813.      all-inclusive, but does hit the high points.
  2814.  
  2815.  
  2816.      Changes From Version 4.0 to Version 5.0
  2817.  
  2818.      I've moved.  If you need to reach me, CompuServe is still the best bet.  My
  2819.      user ID is 74025,514.  My mailing address has changed since the past
  2820.      version, however, and is shown below.
  2821.  
  2822.      No more "line too long."  SNAP! can now handle lines of arbitrary length,
  2823.      so long as no single physical line exceeds 255 characters.  You can combine
  2824.      as many 255-character lines as you want with continuation characters.  
  2825.  
  2826.      Local Cross References and Memory Conservation.  Version 5.0 allows you to
  2827.      create "local" cross reference reports--cross references for each program
  2828.      and procedure file.  Local cross references use very little memory.  If you
  2829.      use local cross references, you should be able to document much larger
  2830.      systems.  For example, I had no trouble documenting a 50,000+ line SBT
  2831.      payroll system with local cross references on.  Note that local cross
  2832.      references and the regular global cross references are mutually exclusive.
  2833.  
  2834.      Multiple directories.  You can document programs and data files in multiple
  2835.      directories.  The top file screen prompts you for one directory for
  2836.      programs and another one for data, but you can have up to 25 program
  2837.      directories and 25 data directories.  You define new directories with the 
  2838.           *# SNAP DATAPATH directory-path
  2839.      and
  2840.           *# SNAP PRGPATH directory-path
  2841.      directives.
  2842.  
  2843.      Sending printer output to a file.  With SNAP! 5.0, you can send printer
  2844.      output to any device, including a file or an output port (e.g., COM2:).
  2845.  
  2846.      Comment alignment.  You can instruct SNAP! to align "&&" comments on a
  2847.      particular column so that they all line up nicely.
  2848.  
  2849.      Heading Options.  You can specify the items to include in a heading.  For
  2850.      example, you can include "Called by" and exclude "Calls".
  2851.  
  2852.  
  2853.      Changes From Version 3.0 to Version 4.0
  2854.  
  2855.      Speed.  Version 4.0 is about 25% faster than version 3.0 if you have enough
  2856.      EMS memory to hold the 210K overlay.  If not, the speed of versions 4.0 and
  2857.      3.0 will be approximately equal.
  2858.  
  2859.      Memory Capacity.  Version 4.0 uses program overlays to increase the amount
  2860.      of memory available for cross referencing.  You will ordinarily get about
  2861.      50K more memory with 4.0.
  2862.  
  2863.                                           47
  2864.  
  2865.  
  2866.  
  2867.  
  2868.  
  2869.  
  2870.  
  2871.      Dialect Support.  SNAP! 4.0 now supports dBASE IV and FoxPro, as well as
  2872.      all of the previously-supported variants of the X-Base language.
  2873.  
  2874.      Mouse Support.  SNAP! 4.0 now fully supports mousing.  You can use the
  2875.      mouse to position the cursor, select function keys, and do pretty much
  2876.      everything else you would expect.
  2877.  
  2878.      Report Form and Label Documentation.  If you are using dBASE IV, SNAP! will
  2879.      automatically document the FRG and LBG files that dBASE IV produces.  These
  2880.      files are very much like program files and contain the code to implement
  2881.      the reports or labels you have defined.  SNAP! will include these files in
  2882.      the "CALLS" lists in the headings and will also include them in the tree
  2883.      diagram if you have set the tree options to display them.  SNAP! does not
  2884.      produce the full report form documentation for these files.
  2885.  
  2886.      UDF Recognition.  The code for detecting calls to user defined functions
  2887.      (UDFs) has been extensively revised and should now detect nearly all calls
  2888.      to UDFs, even the sneaky and underhanded ones.  For example, SNAP! now
  2889.      detects UDF calls from MEMOEDIT, DBEDIT and ACHOICE in Clipper
  2890.      applications, as well as a host of other, special, UDF situations.
  2891.  
  2892.      Documentation of Other Files.  Version 4.0 now tracks "other" files--files
  2893.      that don't fit into any of the categories such as databases, index files,
  2894.      etc.  Examples of other files include text files that are appended into
  2895.      memo fields, output files from "SET PRINTER TO foo.txt" statements and so
  2896.      forth.
  2897.  
  2898.      Printer Definition File.  SNAP! 4.0 now is distributed with a printer
  2899.      definition file, SNAPPRT.SNP, that contains parameters for some common
  2900.      printers.  It is an ASCII file and you can add new printers (or variants of
  2901.      existing printers) to the list.
  2902.  
  2903.      Parameters.  SNAP! now displays function and procedures parameters, if any,
  2904.      in the procedure summary.  Each procedure or function that takes a
  2905.      parameter will have the parameter line displayed next to the function name
  2906.      in the Procedures Summary report.
  2907.  
  2908.      Page breaks.  You can now use the "*# SNAP FORMFEED" directive to force a
  2909.      page break at a specific spot in the source code.  The "*# SNAP FORMFEED"
  2910.      directive itself is not printed.
  2911.  
  2912.      Program Narratives.  SNAP! 4.0 supports program narratives if they start
  2913.      with "*)" and echoes them to the HEADINGS.DOC file, suitable for use as a
  2914.      cover page for each source code file.
  2915.  
  2916.      Third-Party Libraries.  SNAP! 4.0 is distributed with a set of key words
  2917.      for several popular third-party function libraries.  You can instruct SNAP!
  2918.      to treat these key words as if they were part of the language, which
  2919.      improves SNAP!'s handling of capitalization, formatting and other aspects
  2920.      of your documentation.
  2921.  
  2922.  
  2923.  
  2924.                                           48
  2925.  
  2926.  
  2927.  
  2928.  
  2929.  
  2930.  
  2931.  
  2932.      PERSONAL.KEY.  You can now create a file with your own set of key words. 
  2933.      "PERSONAL.KEY" is a magic name--SNAP! searches for it in the SNAP!
  2934.      subdirectory and adds anything it finds in it to the key words list.
  2935.  
  2936.      "*# INCLUDE" key words.  You can add a "*# INCLUDE foo" statement to
  2937.      DB4WORDS.SNP or PERSONAL.KEY to include other key words files, such as the
  2938.      third-party function library key words described above.
  2939.  
  2940.      Control Structure commenting.  Version 4.0 also allows you to add comments
  2941.      to the ends of control structures such as IF/ENDIF and CASE/ENDCASE.  For
  2942.      example, you can instruct SNAP! to add the IF condition after each ENDIF.
  2943.          IF foo = bar
  2944.             DO this
  2945.          ENDIF (foo = bar)    <-- SNAP! adds the "(foo = bar)"
  2946.  
  2947.      Reprinting source code.  You can now run SNAP!, exit the program without
  2948.      printing source code, and use the "F9--print now" option to print the
  2949.      source code later.  SNAP! now creates a REPRINT.DOC file that contains the
  2950.      names of all programs, procedures, action files and other files that are
  2951.      printed with source code.  Prior to version 4.0 it was difficult to print
  2952.      source code if you did not do it during the SNAP! documentation run.  In
  2953.      addition, SNAP! creates the DOCLIST.DOC file that contains the names of
  2954.      documentation files.  You can also use F9 to print these files.
  2955.  
  2956.      Changes From Version 2.0 to Version 3.0 
  2957.  
  2958.      Speed.  Version 3.0 is be approximately 2.5 times as fast as version 2.0. 
  2959.      The more procedures you use, the faster it will be. SNAP! 2.0 was
  2960.      particularly inefficient in documenting procedures.
  2961.  
  2962.      Source Code Printing.  You can now use the source code printing routines
  2963.      without going through the entire documentation process. When you press the
  2964.      right function key, it asks for a filename. SNAP! searches this file for
  2965.      other filenames, which it then prints.
  2966.  
  2967.      User Interface.  The user interface has gotten an interface-lift <guffaw>
  2968.      since the last version.  The number of option screens grew too large to be
  2969.      conveniently browsed with the facilities in version 2.  Version 3 now
  2970.      organizes all the screens underneath a main menu.  You can also select menu
  2971.      items with Alt-key combinations, without having to deal with the menu
  2972.      itself.
  2973.  
  2974.      Memory Usage.  SNAP! 3.0 uses some additional dynamic data structures to
  2975.      minimize wasted space.  Under normal circumstances, it should roughly
  2976.      triple the size of the application that can be accommodated by the system. 
  2977.      In addition, after the conversion to Turbo Pascal 4.0, the size of the
  2978.      program itself shrank by about 20%.
  2979.  
  2980.      New Reports.  A system summary is now available to show: 
  2981.         Lines of code
  2982.           Database and index names
  2983.           Number of program files
  2984.  
  2985.                                           49
  2986.  
  2987.  
  2988.  
  2989.  
  2990.  
  2991.  
  2992.  
  2993.           Number of procedures
  2994.         . . . and lots of other summary information.
  2995.  
  2996.      Arrays are recognized in the cross-reference report and are denoted with
  2997.      brackets (for Clipper) or parentheses (for FoxBASE), as appropriate (e.g.,
  2998.      FOO[100] or FOO(100,50) ), with the declared size shown.  The
  2999.      cross-reference report also lists public variables, macros and arrays
  3000.      separately.
  3001.  
  3002.      The report form documentation has been revised extensively (dBASE III
  3003.      only).  It now shows each of the fields in the report, displays the report
  3004.      heading, etc.  Similar documentation is now available for label forms,
  3005.      which were ignored entirely by SNAP! version 2.0.)
  3006.  
  3007.      The database summary now includes start and end columns for each field. 
  3008.      Alias names are now usually shown with the appropriate physical database
  3009.      file in the database summary, file heading, tree, etc.
  3010.  
  3011.      Link files can now be created for PLINK86, Turbo C TLINK, or the Microsoft
  3012.      LINK program.  Make files continue to support NDMAKE and now also support
  3013.      the Clipper MAKE utility.
  3014.  
  3015.      File headings and may other reports show the date and time of last change,
  3016.      based on the file date/time stamp.
  3017.  
  3018.      Additional Options
  3019.  
  3020.      Here are some of the new things you can control: 
  3021.           Suppression of blank lines in output file
  3022.           Suppression of comments in output file
  3023.           Optional extra indent under DO CASE statement 
  3024.           Inclusion of DBF, NDX, MEM, FRM and LBL files in the tree 
  3025.           Capitalization of key words
  3026.           Capitalization of tokens
  3027.           Temporary suspension of cross-referencing and formatting
  3028.           Leave the file date/time stamp unchanged
  3029.           Separate directories for programs and databases
  3030.  
  3031.      Changes Since SNAP! Version 1.0
  3032.  
  3033.      Practically everything.
  3034.  
  3035.  
  3036.  
  3037.  
  3038.  
  3039.  
  3040.  
  3041.  
  3042.  
  3043.  
  3044.  
  3045.  
  3046.                                           50
  3047.  
  3048.  
  3049.  
  3050.  
  3051.  
  3052.  
  3053.  
  3054.                              Some Administrative Matters
  3055.  
  3056.      Version Numbers
  3057.  
  3058.      In the past, I have sometimes been criticized for releasing one or more
  3059.      "maintenance" versions shortly after a major update.  I am guilty, but
  3060.      unrepentant.  In an attempt to be responsive to user suggestions and bug
  3061.      reports, I will continue to add features and fix bugs as they are reported. 
  3062.      When the resulting minor changes are uploaded, the SNAP! version will
  3063.      include a letter (e.g., SNAP! version 4.00 will change to 4.00a).  In this
  3064.      example, if you have version 4.00, don't worry about downloading another
  3065.      version before 4.1 unless you need the specific features in the intervening
  3066.      versions.
  3067.  
  3068.  
  3069.      Updates and New Versions
  3070.  
  3071.      SNAP! is available on CompuServe.  At the time this documentation file was
  3072.      written, copies are available on the Fox (GO FOXFORUM) and Nantucket (GO
  3073.      NANFORUM) forums.
  3074.  
  3075.      Rather than download the large SNAP! files, you may prefer to send me a
  3076.      blank, formatted diskette (either 3.5 or 5.25 inch, but 3.5 takes longer)
  3077.      and a postage-paid diskette mailer, and I will send you the most current
  3078.      version.  My address is:
  3079.           Walter J. Kennamer
  3080.           7027 Dunstans Lane
  3081.           Toledo, Ohio   43617
  3082.  
  3083.      If you want me to supply the mailers, disks and postage, please enclose a
  3084.      check for $25.  This high figure is ostensibly for postage and handling,
  3085.      but is really for putting me to the trouble of buying mailers, disks and
  3086.      stamps.  I prefer programming to managing a mailing effort, so I will do
  3087.      the former cheaply but the latter only for a price.
  3088.  
  3089.  
  3090.      How to Get Support
  3091.  
  3092.      My CIS ID is 74025,514.  I log on nearly every day, except when I am
  3093.      traveling.  I am easiest to reach through CompuServe mail, but I also check
  3094.      in on the Fox, Ashton-Tate, and Nantucket Forums periodically.  If you have
  3095.      any suggestions about how to improve SNAP! or if you have encountered a
  3096.      bug, please let me know.
  3097.  
  3098.      My job requires me to travel frequently, and I am usually hard to reach by
  3099.      telephone.  You will probably have better success reaching me through
  3100.      CompuServe or by mail.
  3101.  
  3102.  
  3103.  
  3104.  
  3105.  
  3106.  
  3107.                                           51
  3108.  
  3109.  
  3110.  
  3111.  
  3112.  
  3113.  
  3114.  
  3115.      Association of Shareware Professionals
  3116.  
  3117.      I am a member of the Association of Shareware Professionals (ASP).  ASP
  3118.      wants to make sure that the shareware principle works for you.  If you are
  3119.      unable to resolve a shareware-related problem with an ASP member by
  3120.      contacting the member directly, ASP may be able to help.  The ASP Ombudsman
  3121.      can help you resolve a dispute or problem with an ASP member, but does not
  3122.      provide technical support for members' products.  Please write to the ASP
  3123.      Ombudsman at P.O. Box 5786, Bellevue, WA  98006 or send a CompuServe
  3124.      message via Easyplex to ASP Ombudsman 70007,3536.
  3125.  
  3126.  
  3127.  
  3128.  
  3129.  
  3130.  
  3131.  
  3132.  
  3133.  
  3134.  
  3135.  
  3136.  
  3137.  
  3138.  
  3139.  
  3140.  
  3141.  
  3142.  
  3143.  
  3144.  
  3145.  
  3146.  
  3147.  
  3148.  
  3149.  
  3150.  
  3151.  
  3152.  
  3153.  
  3154.  
  3155.  
  3156.  
  3157.  
  3158.  
  3159.  
  3160.  
  3161.  
  3162.  
  3163.  
  3164.  
  3165.  
  3166.  
  3167.  
  3168.                                           52
  3169.  
  3170.  
  3171.  
  3172.  
  3173.  
  3174.  
  3175.  
  3176.                                    Acknowledgements
  3177.  
  3178.      Special thanks to Andy Walsh for writing several string procedures in
  3179.      assembly language for me.  Thanks to Peter Petto, Paul Ferrara and everyone
  3180.      else who helped me develop and debug SNAP!  Thanks to Pat Adams for public
  3181.      relations.  Thanks to Charles S. Galloway, for nagging me to do what I know
  3182.      I ought to.  He has contributed a great deal to SNAP! 5.0.
  3183.  
  3184.      Thanks to all the beta testers who helped so much with handling the last-
  3185.      minute details.  I used to mention them separately.  I don't anymore,
  3186.      though, so that they are not blamed for any of the last-minute details that
  3187.      turn out not to have been handled after all.  They know who they are.
  3188.  
  3189.  
  3190.  
  3191.  
  3192.  
  3193.  
  3194.  
  3195.  
  3196.  
  3197.  
  3198.  
  3199.  
  3200.  
  3201.  
  3202.  
  3203.  
  3204.  
  3205.  
  3206.  
  3207.  
  3208.  
  3209.  
  3210.  
  3211.  
  3212.  
  3213.  
  3214.  
  3215.  
  3216.  
  3217.  
  3218.  
  3219.  
  3220.  
  3221.  
  3222.  
  3223.  
  3224.  
  3225.  
  3226.  
  3227.  
  3228.  
  3229.                                           53
  3230.  
  3231.  
  3232.  
  3233.  
  3234.  
  3235.  
  3236.  
  3237.  
  3238.                              Appendix A -- Sample Reports
  3239.  
  3240.      The following sample reports illustrate the formats of some SNAP! output. 
  3241.      Since the documentation for a full system is voluminous, only limited
  3242.      portions of the documentation are presented here. This saves much space,
  3243.      but has the disadvantage of making some reports "out of sync."  Thus, the
  3244.      internal consistency of a complete package of documentation is missing
  3245.      here.  For example, if you try to trace the entries in the tree back to
  3246.      TODO.PRG, you will discover that they don't track since I trimmed out much
  3247.      of TODO.PRG so as to reduce the bulk of the documentation file. Similarly,
  3248.      the system summary shows a lot of databases that aren't in the DATADICT.DOC
  3249.      file.
  3250.  
  3251.      Of course, the best way to see sample SNAP! reports is to run it on some of
  3252.      your own programs.
  3253.  
  3254.  
  3255.  
  3256.  
  3257.  
  3258.  
  3259.  
  3260.  
  3261.  
  3262.  
  3263.  
  3264.  
  3265.  
  3266.  
  3267.  
  3268.  
  3269.  
  3270.  
  3271.  
  3272.  
  3273.  
  3274.  
  3275.  
  3276.  
  3277.  
  3278.  
  3279.  
  3280.  
  3281.  
  3282.  
  3283.  
  3284.  
  3285.  
  3286.  
  3287.  
  3288.  
  3289.  
  3290.                                           54
  3291.  
  3292.  
  3293.  
  3294.  
  3295.  
  3296.  
  3297.  
  3298.  
  3299.        *:*********************************************************************
  3300.        *:
  3301.        *:        Program: TODO.PRG
  3302.        *:
  3303.        *:         System: ToDo -- To Do Management System
  3304.        *:         Author: Walter J. Kennamer
  3305.        *:      Copyright (c) 1988, Walter J. Kennamer
  3306.        *:  Last modified: 02/26/88     23:00
  3307.        *:
  3308.        *:          Calls: HELP.PRG
  3309.        *:               : F2_HANDLR        (procedure in TODOPRC.PRG)
  3310.        *:               : HELPEDIT         (procedure in TODOPRC.PRG)
  3311.        *:               : TDDEFLT.PRG
  3312.        *:               : ERRORMSG         (procedure in TODOPRC.PRG)
  3313.        *:               : SETDATE.PRG
  3314.        *:               : TDLOGO.PRG
  3315.        *:               : TDSETUP.PRG
  3316.        *:               : TDINPUT.PRG
  3317.        *:
  3318.        *:   Memory Files: ACCESSES.MEM
  3319.        *:               : DEFAULT.MEM
  3320.        *:
  3321.        *:     Documented: 03/02/88 at 18:39                 SNAP! version 3.00
  3322.        *:*********************************************************************
  3323.        PARAMETERS c_line               && command line
  3324.        *# SNAPMACRO s_tdfile   todo
  3325.        *# SNAPMACRO s_ddndx    tododd
  3326.        *# SNAPMACRO s0_adfname address
  3327.        external subject
  3328.        PUBLIC clipper,s_cmdline
  3329.        IF pcount() > 0
  3330.           s_cmdline = Alltrim(UPPER(c_line))
  3331.        ELSE
  3332.           s_cmdline = ""
  3333.        ENDIF
  3334.           .
  3335.           .
  3336.           .
  3337.        * read defaults
  3338.        USE
  3339.        IF FILE("default.mem")
  3340.           REST FROM  DEFAULT ADDITIVE
  3341.           IF s0_bw
  3342.              s0_montype = "M"
  3343.           ELSE
  3344.              s0_montype = "C"
  3345.           ENDIF
  3346.        ELSE
  3347.           DO tddeflt
  3348.        ENDIF
  3349.        DO tdinput
  3350.  
  3351.                                            55
  3352.  
  3353.  
  3354.  
  3355.  
  3356.  
  3357.  
  3358.  
  3359.        *: EOF: TODO.PRG
  3360.  
  3361.  
  3362.  
  3363.  
  3364.  
  3365.  
  3366.  
  3367.  
  3368.  
  3369.  
  3370.  
  3371.  
  3372.  
  3373.  
  3374.  
  3375.  
  3376.  
  3377.  
  3378.  
  3379.  
  3380.  
  3381.  
  3382.  
  3383.  
  3384.  
  3385.  
  3386.  
  3387.  
  3388.  
  3389.  
  3390.  
  3391.  
  3392.  
  3393.  
  3394.  
  3395.  
  3396.  
  3397.  
  3398.  
  3399.  
  3400.  
  3401.  
  3402.  
  3403.  
  3404.  
  3405.  
  3406.  
  3407.  
  3408.  
  3409.  
  3410.  
  3411.  
  3412.                                            56
  3413.  
  3414.  
  3415.  
  3416.  
  3417.  
  3418.  
  3419.  
  3420.  
  3421.        System Summary
  3422.  
  3423.        System: ToDo -- To Do Management System
  3424.        Author: Walter J. Kennamer
  3425.        03/02/88   18:56:29
  3426.        System Summary
  3427.  
  3428.        -------------------------------------------------------------------------
  3429.  
  3430.  
  3431.        This system has:
  3432.          8636 lines of code
  3433.            46 program files
  3434.             2 procedure files
  3435.            84 procedures and functions
  3436.            18 databases
  3437.             8 index files
  3438.             3 report forms
  3439.             0 format files
  3440.             0 label forms
  3441.             5 memory variable files
  3442.           622 cross-referenced tokens
  3443.  
  3444.  
  3445.        See the tree diagram for programs, procedures, functions and format files
  3446.  
  3447.  
  3448.                           Index          Report         Label          Memory
  3449.          Databases        Files          Forms          Forms          Files
  3450.        -------------- -------------- -------------- -------------- -------------
  3451.  
  3452.        HELP.DBF       HELPKEY.NTX    SUBREPT.FRM                   ACCESSES.MEM
  3453.        TODO.SKL       SUBJECT.NTX    TDSUMIN.FRM                   DEFAULT.MEM
  3454.        TODO.DBF       TODODD.NTX     TDDETIN.FRM                   LASTFILE.MEM
  3455.        SUBJECT.DBF    &NTXNAME                                     PRINTER.MEM
  3456.        ADDRESS.DBF    HISTDD.NTX                                   CLIP.MEM
  3457.        &B_FILE.DBF    PRIORITY.NDX
  3458.        NOTEPAD.DBF    DATEDUE.NDX
  3459.        PRTCODES.DBF   DATEDUE.NTX
  3460.        &FILE
  3461.        HIST.DBF
  3462.        TEMP.DBF
  3463.        &FNAME
  3464.        &BAK_NAME.DBF
  3465.        &FNAME.DBF
  3466.        AREACODE.DBF
  3467.        DATEDUE.DBF
  3468.        PRM.SKL
  3469.        ADDRESS.ASC
  3470.  
  3471.  
  3472.  
  3473.                                            57
  3474.  
  3475.  
  3476.  
  3477.  
  3478.  
  3479.  
  3480.  
  3481.  
  3482.        -------------------------------------------------------------------------
  3483.        SNAP! created the following documentation files:
  3484.           C:\SCRATCH\STATS.DOC
  3485.           C:\SCRATCH\TREE.DOC
  3486.           C:\SCRATCH\FILELIST.DOC
  3487.           C:\SCRATCH\NDXSUMRY.DOC
  3488.           C:\SCRATCH\DATADICT.DOC
  3489.           C:\SCRATCH\FRMSUMRY.DOC
  3490.           C:\SCRATCH\PRCSUMRY.DOC
  3491.           C:\SCRATCH\XREF.DOC
  3492.           C:\SCRATCH\TODO.LNK
  3493.           C:\SCRATCH\TODO.TLK
  3494.           C:\SCRATCH\TODO.MLK
  3495.           C:\SCRATCH\MAKEFILE
  3496.           C:\SCRATCH\ERROR.DOC
  3497.           Action diagram files
  3498.           UPDATE.BAT   to update program source files in C:\TODO
  3499.           BACKDBF.BAT  to backup databases, indexes and memory files
  3500.           BACKPRG.BAT  to backup program files, report forms and format files
  3501.           PRINTDOC.BAT to print documentation files
  3502.  
  3503.  
  3504.  
  3505.  
  3506.  
  3507.  
  3508.  
  3509.  
  3510.  
  3511.  
  3512.  
  3513.  
  3514.  
  3515.  
  3516.  
  3517.  
  3518.  
  3519.  
  3520.  
  3521.  
  3522.  
  3523.  
  3524.  
  3525.  
  3526.  
  3527.  
  3528.  
  3529.  
  3530.  
  3531.  
  3532.  
  3533.  
  3534.                                            58
  3535.  
  3536.  
  3537.  
  3538.  
  3539.  
  3540.  
  3541.  
  3542.  
  3543.        System: ToDo -- To Do Management System
  3544.        Author: Walter J. Kennamer
  3545.        03/02/88   18:56:09
  3546.        Tree Diagram
  3547.  
  3548.        -------------------------------------------------------------------------
  3549.  
  3550.        TODO.PRG
  3551.        ├────HELP.PRG
  3552.        │    │    HELP.DBF (database)
  3553.        │    ├────SHOW_HELP (procedure in HELP.PRG)
  3554.        │    │    ├────SETCOLOR (procedure in TODOPRC.PRG)
  3555.        │    │    └────CENTER (procedure in TODOPRC.PRG)
  3556.        │    ├────SETCOLOR (procedure in TODOPRC.PRG)
  3557.        │    └────CENTER (procedure in TODOPRC.PRG)
  3558.        ├────F2_HANDLR (procedure in TODOPRC.PRG)
  3559.        │    ├────ADDRLIST.PRG
  3560.        │    │    └────SETCOLOR (procedure in TODOPRC.PRG)
  3561.        │    └────NUMLIST.PRG
  3562.        │         └────SETCOLOR (procedure in TODOPRC.PRG)
  3563.        ├────HELPEDIT (procedure in TODOPRC.PRG)
  3564.        ├────TDDEFLT.PRG
  3565.        │    ├────SETCOLOR (procedure in TODOPRC.PRG)
  3566.        │    ├────SCRHEAD (procedure in TODOPRC.PRG)
  3567.        │    │    └────SETCOLOR (procedure in TODOPRC.PRG)
  3568.        │    ├────TDSETUP.PRG
  3569.        │    │    │    TODO.SKL (database)
  3570.        │    │    │    TODO.DBF (database)
  3571.        │    │    │    SUBJECT.DBF (database)
  3572.        │    │    │    ADDRESS.DBF (database)
  3573.        │    ├────CENTER (procedure in TODOPRC.PRG)
  3574.        │    ├────SETDATE.PRG
  3575.        │    ├────SETPRT.PRG
  3576.        │    │    │    PRTCODES.DBF (database)
  3577.        │    │    ├────SCRHEAD (procedure in TODOPRC.PRG)
  3578.        │    │    │    └────SETCOLOR (procedure in TODOPRC.PRG)
  3579.        │    │    └────ERRORMSG (procedure in TODOPRC.PRG)
  3580.        │    │         ├────SETCOLOR (procedure in TODOPRC.PRG)
  3581.        │    │         └────CENTER (procedure in TODOPRC.PRG)
  3582.        │    ├────F2_HANDLR (procedure in TODOPRC.PRG)
  3583.        │    │    ├────ADDRLIST.PRG
  3584.        │    │    │    └────SETCOLOR (procedure in TODOPRC.PRG)
  3585.        │    │    └────NUMLIST.PRG
  3586.        │    │         └────SETCOLOR (procedure in TODOPRC.PRG)
  3587.        │    ├────F3_HANDLR (procedure in TODOPRC.PRG)
  3588.  
  3589.        and so forth
  3590.  
  3591.  
  3592.  
  3593.  
  3594.  
  3595.                                            59
  3596.  
  3597.  
  3598.  
  3599.  
  3600.  
  3601.  
  3602.  
  3603.  
  3604.        System: ToDo -- To Do Management System
  3605.        Author: Walter J. Kennamer
  3606.        03/02/88   18:55:52
  3607.        Procedure and Function Summary
  3608.  
  3609.        -------------------------------------------------------------------------
  3610.  
  3611.        2 procedure files in the system
  3612.           SUBJECT.PRG
  3613.           TODOPRC.PRG
  3614.        -------------------------------------------------------------------------
  3615.  
  3616.        SUBJECT.PRG -- Last updated:  12/30/87 at   8:47
  3617.  
  3618.           Contains: SUBOK()               (Params: SUBNAME)
  3619.                  Calls: SETCOLOR          (procedure in TODOPRC.PRG)
  3620.                  Calls: CENTER            (procedure in TODOPRC.PRG)
  3621.                  Calls: PUTSUB            (procedure in TODOPRC.PRG)
  3622.           Contains: SUBLOOK()             (Params: M_SUBNAME)
  3623.                  Calls: SETCOLOR          (procedure in TODOPRC.PRG)
  3624.                    .
  3625.                    .
  3626.                    .
  3627.           Contains: SUBEDIT               (Params: none)
  3628.              Called by: ED()              (function in SUBJECT.PRG)
  3629.                  Calls: SETCOLOR          (procedure in TODOPRC.PRG)
  3630.  
  3631.        -------------------------------------------------------------------------
  3632.        TODOPRC.PRG -- Last updated:  12/28/87 at  14:20
  3633.  
  3634.  
  3635.           Contains: F2_HANDLR             (Params: none)
  3636.              Called by: TODO.PRG
  3637.              Called by: TDDEFLT.PRG
  3638.                  Calls: ADDRLIST.PRG
  3639.                  Calls: NUMLIST.PRG
  3640.           Contains: F3_HANDLR             (Params: none)
  3641.              Called by: TODO.PRG
  3642.              Called by: TDDEFLT.PRG
  3643.                  Calls: SETCOLOR          (procedure in TODOPRC.PRG)
  3644.           Contains: F4_HANDLR             (Params: none)
  3645.              Called by: TODO.PRG
  3646.              Called by: TDDEFLT.PRG
  3647.                    .
  3648.                    .
  3649.                    .
  3650.           Contains: ISCTRL()              (Params: none)
  3651.           Contains: SCREEN_ON             (Params: none)
  3652.              Called by: ROLODEX.PRG
  3653.           Contains: PRINT_ON              (Params: none)
  3654.              Called by: ROLODEX.PRG
  3655.  
  3656.                                            60
  3657.  
  3658.  
  3659.  
  3660.  
  3661.  
  3662.  
  3663.  
  3664.  
  3665.        System: ToDo -- To Do Management System
  3666.        Author: Walter J. Kennamer
  3667.        03/02/88   18:55:42
  3668.        Database Structure Summary
  3669.  
  3670.        -------------------------------------------------------------------------
  3671.  
  3672.        3 databases in the system
  3673.           HELP.DBF
  3674.           TODO.DBF
  3675.           SUBJECT.DBF
  3676.        -------------------------------------------------------------------------
  3677.  
  3678.        Structure for database : HELP.DBF
  3679.        Number of data records :      37
  3680.                  Last updated :  09/09/87 at  11:06
  3681.        Field  Field name  Type        Width    Dec    Start      End
  3682.            1  HCALLPRG    Character       8               1        8
  3683.            2  HINPUTVAR   Character      12               9       20
  3684.            3  HSCRNNUM    Character       4              21       24
  3685.            4  HELPMSG     Memo           10              25       34
  3686.        ** Total **                       35
  3687.  
  3688.  
  3689.        This database is associated with the memo file: HELP.DBT
  3690.  
  3691.        This database appears to be associated with index file(s):
  3692.               : HELPKEY.NTX  (UPPER(hcallprg+hscrnnum+hinputvar))
  3693.  
  3694.        SNAP! did not find any associated report forms
  3695.  
  3696.        Used by: HELP.PRG
  3697.               : TDFIX.PRG
  3698.               : TDREINDX.PRG
  3699.               : TDREPAIR       (procedure in TDFIX.PRG)
  3700.  
  3701.        -------------------------------------------------------------------------
  3702.  
  3703.  
  3704.        Structure for database : TODO.DBF
  3705.        Number of data records :     112
  3706.                  Last updated :  03/01/88 at  17:35
  3707.        Field  Field name  Type        Width    Dec    Start      End
  3708.            1  ITEM        Character      55               1       55
  3709.            2  PRIORITY    Character       1              56       56
  3710.            3  DATE_DUE    Date            8              57       64
  3711.            4  CALTIME     Character       5              65       69
  3712.            5  COMPLETE    Character       1              70       70
  3713.            6  ADVANCE     Numeric         3              71       73
  3714.            7  DATE_ASGN   Date            8              74       81
  3715.            8  DATE_COMP   Date            8              82       89
  3716.  
  3717.                                            61
  3718.  
  3719.  
  3720.  
  3721.  
  3722.  
  3723.  
  3724.  
  3725.            9  LATE        Numeric         3              90       92
  3726.           10  ITEMTYPE    Character       1              93       93
  3727.           11  ALARM       Character       1              94       94
  3728.           12  SUBJECT     Character      30              95      124
  3729.           13  DURATION    Numeric         8      2      125      132
  3730.           14  VERSION     Character       5             133      137
  3731.        ** Total **                      138
  3732.  
  3733.  
  3734.        This database appears to be associated with index file(s):
  3735.               : TODODD.NTX   (DTOS(date_due)+priority+caltime)
  3736.               : DATEDUE.NDX  (index key not found)
  3737.  
  3738.        This database appears to be associated with multiple index file(s):
  3739.               : TODO.MDX
  3740.  
  3741.        SNAP! did not find any associated report forms
  3742.  
  3743.        Used by: TDSETUP.PRG
  3744.               : TDINPUT.PRG
  3745.               : OPENDATA       (procedure in TDSETUP.PRG)
  3746.               : EDITEXIT.PRG
  3747.               : TDREDATE.PRG
  3748.               : TDPURGE.PRG
  3749.               : TDFIX.PRG
  3750.               : TDCAL.PRG
  3751.               : TDREINDX.PRG
  3752.  
  3753.        -------------------------------------------------------------------------
  3754.  
  3755.  
  3756.        Structure for database : SUBJECT.DBF
  3757.        Number of data records :      41
  3758.                  Last updated :  01/12/88 at   9:34
  3759.        Field  Field name  Type        Width    Dec    Start      End
  3760.            1  SUBCODE     Character      20               1       20
  3761.            2  SUBJECT     Character      30              21       50
  3762.        ** Total **                       51
  3763.  
  3764.  
  3765.        This database appears to be associated with index file(s):
  3766.               : SUBJECT.NTX  (UPPER(subject))
  3767.  
  3768.        SNAP! did not find any associated report forms
  3769.  
  3770.        Used by: TDSETUP.PRG
  3771.               : TDINPUT.PRG
  3772.               : OPENDATA       (procedure in TDSETUP.PRG)
  3773.               : TDREINDX.PRG
  3774.  
  3775.  
  3776.  
  3777.  
  3778.                                            62
  3779.  
  3780.  
  3781.  
  3782.  
  3783.  
  3784.  
  3785.  
  3786.        -------------------------------------------------------------------------
  3787.        System: ToDo -- To Do Management System
  3788.        Author: Walter J. Kennamer
  3789.        03/02/88   18:55:49
  3790.        Database summary
  3791.        -------------------------------------------------------------------------
  3792.  
  3793.        Note: the actual system used more than 3 databases.  All but three were
  3794.        removed above to save space.  This portion of the report shows all of
  3795.        them.
  3796.  
  3797.        Field Name         Type    Len   Dec     Database
  3798.        ABBREV              C       2     0     AREACODE.DBF
  3799.        ADDRESS             C      53     0     ADDRESS.DBF
  3800.        ADVANCE             N       3     0     TODO.SKL
  3801.                                                TODO.DBF
  3802.                                                HIST.DBF
  3803.        ALARM               C       1     0     TODO.SKL
  3804.                                                TODO.DBF
  3805.                                                HIST.DBF
  3806.        AREACODE            N       3     0     AREACODE.DBF
  3807.        BPHONE              C      12     0     ADDRESS.DBF
  3808.        CALTIME             C       5     0     TODO.SKL
  3809.                                                TODO.DBF
  3810.                                                HIST.DBF
  3811.        CITIES              C      78     0     AREACODE.DBF
  3812.        CITY                C      25     0     ADDRESS.DBF
  3813.        COL                 N       2     0     PRTCODES.DBF
  3814.        COMMENT             C      50     0     ADDRESS.DBF
  3815.        COMPANY             C      53     0     ADDRESS.DBF
  3816.        COMPLETE            C       1     0     TODO.SKL
  3817.                                                TODO.DBF
  3818.                                                HIST.DBF
  3819.        COMPRESS            C      13     0     PRTCODES.DBF
  3820.        COUNTRY             C      20     0     ADDRESS.DBF
  3821.        DATE_ASGN           D       8     0     TODO.SKL
  3822.                                                TODO.DBF
  3823.                                                HIST.DBF
  3824.        DATE_COMP           D       8     0     TODO.SKL
  3825.                                                TODO.DBF
  3826.                                                HIST.DBF
  3827.        DATE_DUE            D       8     0     TODO.SKL
  3828.                                                TODO.DBF
  3829.                                                HIST.DBF
  3830.        DURATION            N       8     2     TODO.SKL
  3831.                                                TODO.DBF
  3832.        ELITE               C      13     0     PRTCODES.DBF
  3833.        FORMFEED            C      13     0     PRTCODES.DBF
  3834.        HCALLPRG            C       8     0     HELP.DBF
  3835.        HELPMSG             M      10     0     HELP.DBF
  3836.        HINPUTVAR           C      12     0     HELP.DBF
  3837.        HSCRNNUM            C       4     0     HELP.DBF
  3838.  
  3839.                                            63
  3840.  
  3841.  
  3842.  
  3843.  
  3844.  
  3845.  
  3846.  
  3847.        ITEM                C      55     0     TODO.SKL
  3848.                                                TODO.DBF
  3849.                                                HIST.DBF
  3850.        ITEMTYPE            C       1     0     TODO.SKL
  3851.                                                TODO.DBF
  3852.                                                HIST.DBF
  3853.        LATE                N       3     0     TODO.SKL
  3854.                                                TODO.DBF
  3855.                                                HIST.DBF
  3856.        LINE                C      78     0     TEMP.DBF
  3857.                                                PRM.SKL
  3858.        NAME                C      30     0     ADDRESS.DBF
  3859.        NAME                C      25     0     PRTCODES.DBF
  3860.        NOTES               M      10     0     ADDRESS.DBF
  3861.                                                NOTEPAD.DBF
  3862.        PHONE               C      12     0     ADDRESS.DBF
  3863.        POSITION            C      40     0     ADDRESS.DBF
  3864.        PRIORITY            C       1     0     TODO.SKL
  3865.                                                TODO.DBF
  3866.                                                HIST.DBF
  3867.        PRTNUM              N       2     0     PRTCODES.DBF
  3868.        RESET               C      13     0     PRTCODES.DBF
  3869.        ROW                 N       2     0     PRTCODES.DBF
  3870.        SECONDLINE          C      53     0     ADDRESS.DBF
  3871.        STATE               C       2     0     ADDRESS.DBF
  3872.        STATE               C      15     0     AREACODE.DBF
  3873.        SUBCODE             C      20     0     SUBJECT.DBF
  3874.        SUBJECT             C      30     0     TODO.SKL
  3875.                                                TODO.DBF
  3876.                                                SUBJECT.DBF
  3877.                                                HIST.DBF
  3878.        VERSION             C       5     0     TODO.SKL
  3879.                                                TODO.DBF
  3880.                                                NOTEPAD.DBF
  3881.        ZIP                 C      10     0     ADDRESS.DBF
  3882.  
  3883.  
  3884.  
  3885.  
  3886.  
  3887.  
  3888.  
  3889.  
  3890.  
  3891.  
  3892.  
  3893.  
  3894.  
  3895.  
  3896.  
  3897.  
  3898.  
  3899.  
  3900.                                            64
  3901.  
  3902.  
  3903.  
  3904.  
  3905.  
  3906.  
  3907.  
  3908.        System: ToDo -- To Do Management System
  3909.        Author: Walter J. Kennamer
  3910.        03/02/88   18:55:15
  3911.        Index Parameter Summary
  3912.  
  3913.        -------------------------------------------------------------------------
  3914.  
  3915.        5 index files in the system
  3916.           HELPKEY.NDX
  3917.           SUBJECT.NDX
  3918.           TODODD.NDX
  3919.           &NTXNAME
  3920.           DATEDUE.NDX
  3921.        -------------------------------------------------------------------------
  3922.  
  3923.        HELPKEY.NTX -- Indexed on: UPPER(hcallprg+hscrnnum+hinputvar)
  3924.        Last updated:  09/09/87 at  11:06
  3925.  
  3926.  
  3927.        This index file appears to be associated with database(s):
  3928.               : HELP.DBF
  3929.  
  3930.        Used by: HELP.PRG
  3931.               : TDFIX.PRG
  3932.               : TDREINDX.PRG
  3933.               : TDREPAIR       (procedure in TDFIX.PRG)
  3934.  
  3935.        -------------------------------------------------------------------------
  3936.        SUBJECT.NTX -- Indexed on: UPPER(subject)
  3937.        Last updated:  01/12/88 at   9:16
  3938.  
  3939.  
  3940.        This index file appears to be associated with database(s):
  3941.               : SUBJECT.DBF
  3942.  
  3943.        Used by: SUBLOOK()      (function  in SUBJECT.PRG)
  3944.               : PART_MATCH()   (function  in SUBJECT.PRG)
  3945.               : TDSETUP.PRG
  3946.               : TDINPUT.PRG
  3947.               : OPENDATA       (procedure in TDSETUP.PRG)
  3948.               : TDFIX.PRG
  3949.               : TDREINDX.PRG
  3950.               : TDREPAIR       (procedure in TDFIX.PRG)
  3951.  
  3952.        -------------------------------------------------------------------------
  3953.        TODODD.NTX -- Indexed on: DTOS(date_due)+priority+caltime
  3954.        Last updated:  03/01/88 at  17:35
  3955.  
  3956.  
  3957.        This index file appears to be associated with database(s):
  3958.               : TODO.DBF
  3959.  
  3960.  
  3961.                                            65
  3962.  
  3963.  
  3964.  
  3965.  
  3966.  
  3967.  
  3968.  
  3969.        Used by: TDSETUP.PRG
  3970.               : TDINPUT.PRG
  3971.               : EDITEXIT.PRG
  3972.               : EDITSRCH.PRG
  3973.               : TDREDATE.PRG
  3974.               : TDPURGE.PRG
  3975.               : EDITCHGE.PRG
  3976.               : TDFIX.PRG
  3977.               : PRTUNCMP.PRG
  3978.               : TDREINDX.PRG
  3979.               : TDREPAIR       (procedure in TDFIX.PRG)
  3980.  
  3981.        -------------------------------------------------------------------------
  3982.        &NTXNAME is a macro unknown to SNAP!
  3983.  
  3984.        This index file appears to be associated with database(s):
  3985.               : ADDRESS.DBF
  3986.  
  3987.        Used by: TDSETUP.PRG
  3988.               : OPENDATA       (procedure in TDSETUP.PRG)
  3989.               : ADDRESS.PRG
  3990.               : TDFIX.PRG
  3991.               : TDREINDX.PRG
  3992.               : TDREPAIR       (procedure in TDFIX.PRG)
  3993.               : ADDRBOOK.PRG
  3994.               : ROLODEX.PRG
  3995.  
  3996.        -------------------------------------------------------------------------
  3997.        File not found--DATEDUE.NDX
  3998.  
  3999.        This index file appears to be associated with database(s):
  4000.               : TODO.DBF
  4001.  
  4002.        Used by: TDCAL.PRG
  4003.               : TDCALDAY.PRG
  4004.  
  4005.  
  4006.  
  4007.  
  4008.  
  4009.  
  4010.  
  4011.  
  4012.  
  4013.  
  4014.  
  4015.  
  4016.  
  4017.  
  4018.  
  4019.  
  4020.  
  4021.  
  4022.                                            66
  4023.  
  4024.  
  4025.  
  4026.  
  4027.  
  4028.  
  4029.  
  4030.        System: ToDo -- To Do Management System
  4031.        Author: Walter J. Kennamer
  4032.        03/02/88   18:55:15
  4033.        Multiple Index Summary
  4034.  
  4035.        -------------------------------------------------------------------------
  4036.  
  4037.        1 multiple index file in the system
  4038.           TODO.MDX
  4039.        -------------------------------------------------------------------------
  4040.  
  4041.        TODO.MTX--Last updated:  09/09/87 at  11:06
  4042.               TAG : TDITEM  (item)
  4043.               TAG : TDPRIOR (priority+itemtype)
  4044.  
  4045.        This multiple index file appears to be associated with database(s):
  4046.               : TODO.DBF
  4047.  
  4048.        Used by: TODO.PRG
  4049.  
  4050.  
  4051.  
  4052.  
  4053.  
  4054.  
  4055.  
  4056.  
  4057.  
  4058.  
  4059.  
  4060.  
  4061.  
  4062.  
  4063.  
  4064.  
  4065.  
  4066.  
  4067.  
  4068.  
  4069.  
  4070.  
  4071.  
  4072.  
  4073.  
  4074.  
  4075.  
  4076.  
  4077.  
  4078.  
  4079.  
  4080.  
  4081.  
  4082.  
  4083.                                            67
  4084.  
  4085.  
  4086.  
  4087.  
  4088.  
  4089.  
  4090.  
  4091.        System: ToDo -- To Do Management System
  4092.        Author: Walter J. Kennamer
  4093.        03/02/88   18:55:50
  4094.        Report Form File Summary
  4095.  
  4096.        -------------------------------------------------------------------------
  4097.  
  4098.        2 report forms in the system
  4099.           SUBREPT.FRM
  4100.           TDSUMIN.FRM
  4101.         ------------------------------------------------------------------------
  4102.  
  4103.        SUBREPT.FRM                              Last updated:  08/24/87 at  10:14
  4104.           Summary report?  No
  4105.           Eject page before printing?  No       Eject page after printing?  Yes
  4106.           Double space report?  No              Plain page?  No
  4107.           Left margin:    8                     Right Margin:    0
  4108.  
  4109.          
  4110.      -------------------------------------------------------------------------
  4111.                                         Report Contents
  4112.          
  4113.      -------------------------------------------------------------------------
  4114.        No.   Field                               Length    Decimals     Totaled?
  4115.        ---   ----------------------------------  ------    --------     --------
  4116.  
  4117.          1   Subject                                 40        0            No
  4118.          2   Subcode                                 25        0            No
  4119.                                                   -----
  4120.                                                      65
  4121.                                                   =====
  4122.  
  4123.  
  4124.           -----------------------------------------------------------------------
  4125.                                           Report Layout
  4126.           -----------------------------------------------------------------------
  4127.        Page No.     1
  4128.        00/00/00
  4129.  
  4130.                                                  Subject Codes
  4131.  
  4132.        Subject                                  Charge Code
  4133.        1                                        2
  4134.  
  4135.           ----------------------------------------------------------------------
  4136.                       Database and Program References
  4137.           ----------------------------------------------------------------------
  4138.  
  4139.           SNAP! could not find an associated database
  4140.  
  4141.           Used by: SUBREPT        (procedure in SUBJECT.PRG)
  4142.  
  4143.  
  4144.                                            68
  4145.  
  4146.  
  4147.  
  4148.  
  4149.  
  4150.  
  4151.  
  4152.  
  4153.  
  4154.  
  4155.        TDSUMIN.FRM                             Last updated:  09/01/87 at  15:17
  4156.           Summary report?  No
  4157.           Eject page before printing?  Yes      Eject page after printing?  Yes
  4158.           Double space report?  Yes             Plain page?  No
  4159.           Left margin:    1                     Right Margin:    0
  4160.  
  4161.          
  4162.      -------------------------------------------------------------------------
  4163.                                         Report Contents
  4164.          
  4165.      -------------------------------------------------------------------------
  4166.        No.   Field                               Length    Decimals     Totaled?
  4167.        ---   ----------------------------------  ------    --------     --------
  4168.  
  4169.          1   "______"                                 6        0            No
  4170.          2   RECNO()                                  4        0            No
  4171.          3   Item                                    55        0            No
  4172.          4   " "+dtoc(date_due)                       9        0            No
  4173.          5   Caltime                                  6        0            No
  4174.                                                   -----
  4175.                                                      80
  4176.                                                   =====
  4177.  
  4178.  
  4179.          ----------------------------------------------------------------------
  4180.                                    Report Layout
  4181.          ----------------------------------------------------------------------
  4182.        Page No.     1
  4183.        00/00/00
  4184.  
  4185.  
  4186.  
  4187.                                                Uncompleted Items
  4188.  
  4189.               No.  Item                                        Due Date  Time
  4190.               ===  =========================================== ========= =====
  4191.          1    2    3                                           4         5
  4192.  
  4193.  
  4194.           ----------------------------------------------------------------------
  4195.                       Database and Program References
  4196.           ----------------------------------------------------------------------
  4197.  
  4198.           SNAP! could not find an associated database
  4199.  
  4200.           Used by: PRTUNCMP.PRG
  4201.  
  4202.  
  4203.  
  4204.  
  4205.                                            69
  4206.  
  4207.  
  4208.  
  4209.  
  4210.  
  4211.  
  4212.  
  4213.        System: FoxAPP
  4214.        Author: Walter J. Kennamer
  4215.        09/04/91   08:51:49
  4216.        Screen File Summary
  4217.  
  4218.      -----------------------------------------------------------------------------
  4219.      --
  4220.  
  4221.        1 screen file in the system
  4222.           APPSCX.SCX
  4223.      -----------------------------------------------------------------------------
  4224.      --
  4225.  
  4226.        APPSCX.SCX           Last updated:  06/28/91 at 17:29
  4227.  
  4228.                                FoxPro Application Generator                        
  4229.       
  4230.  
  4231.         0         1         2         3         4         5         
  4232.         012345678901234567890123456789012345678901234567890123456789
  4233.        0 
  4234.        1     Step 1: Create or modify a database
  4235.        2      ┌───────────────────────────────────────┐
  4236.        3      │Database name:                         │
  4237.        4      │1: dbfname.............................│
  4238.        5      │< Create >    < Modify >    <File List>│
  4239.        6      └───────────────────────────────────────┘
  4240.        7 
  4241.        8     Step 2 : Design a screen
  4242.        9      ┌───────────────────────────────────────┐
  4243.       10      │Screen name:                           │
  4244.       11      │5: scxname.............................│
  4245.       12      │< Create >    < Modify >    <File List>│
  4246.       13      └───────────────────────────────────────┘
  4247.       14                   «  Generate  »
  4248.       15 
  4249.       16                   <   Cancel   >
  4250.  
  4251.       
  4252.      -----------------------------------------------------------------------------
  4253.      -
  4254.           Window name: Appgen
  4255.           Coordinates: FROM 0,0 TO 0,52
  4256.        Window options: FLOAT CLOSE MINIMIZE SHADOW
  4257.  
  4258.       
  4259.      -----------------------------------------------------------------------------
  4260.      -
  4261.  
  4262.           Name                Type           Picture                               
  4263.       
  4264.  
  4265.  
  4266.                                            70
  4267.  
  4268.  
  4269.  
  4270.  
  4271.  
  4272.  
  4273.  
  4274.       
  4275.      -----------------------------------------------------------------------------
  4276.      -
  4277.  
  4278.        1: dbfname             Field          "@S67"
  4279.        2: adddbf              Push button    "@*VN Create"
  4280.        3: moddbf              Push button    "@*VN Modify"
  4281.        4: Listdbf             Push button    "@*VN File List"
  4282.        5: scxname             Field          "@S67"
  4283.        6: addscx              Push button    "@*VN Create"
  4284.        7: modscx              Push button    "@*VN Modify"
  4285.        8: Listscx             Push button    "@*VN File List"
  4286.        9: generate            Push button    "@*VN \!Generate"
  4287.       10: cancbut             Push button    "@*VT \?Cancel"
  4288.  
  4289.  
  4290.  
  4291.  
  4292.  
  4293.  
  4294.  
  4295.  
  4296.  
  4297.  
  4298.  
  4299.  
  4300.  
  4301.  
  4302.  
  4303.  
  4304.  
  4305.  
  4306.  
  4307.  
  4308.  
  4309.  
  4310.  
  4311.  
  4312.  
  4313.  
  4314.  
  4315.  
  4316.  
  4317.  
  4318.  
  4319.  
  4320.  
  4321.  
  4322.  
  4323.  
  4324.  
  4325.  
  4326.  
  4327.                                            71
  4328.  
  4329.  
  4330.  
  4331.  
  4332.  
  4333.  
  4334.  
  4335.        System: APPMENU Menu Program
  4336.        Author: Walter J. Kennamer
  4337.        09/04/91   09:53:51
  4338.        Menu File Summary
  4339.  
  4340.      -----------------------------------------------------------------------------
  4341.      --
  4342.  
  4343.        1 menu file in the system
  4344.           APPMENU.MNX
  4345.      -----------------------------------------------------------------------------
  4346.      --
  4347.  
  4348.        APPMENU.MNX          Last updated:  06/29/91 at 15:53
  4349.  
  4350.         System                                         ALT+S   (Submenu SYSTEM)
  4351.            About...                                            (Procedure)   
  4352.            Help...                                     F1      _MST_HELP     
  4353.            Macros                                              _MST_MACRO    
  4354.            ------------                                        (Submenu
  4355.      _MST_CALCU)
  4356.            Calculator                                          _MST_CALCU    
  4357.            Calendar/Diary                                      _MST_DIARY    
  4358.            Puzzle                                              _MST_PUZZL    
  4359.            ------------                                        (Submenu )
  4360.            Quit                                                (Procedure)   
  4361.         Edit                                           ALT+E   (Submenu EDIT)
  4362.            Cut                                         CTRL+X  _MED_CUT      
  4363.            Copy                                        CTRL+C  _MED_COPY     
  4364.            Paste                                       CTRL+V  _MED_PASTE    
  4365.            ------------                                        _MED_SP200    
  4366.            Clear                                               _MED_CLEAR    
  4367.            Select All                                  CTRL+A  _MED_SLCTA    
  4368.            ------------                                        _MED_SP300    
  4369.            Preferences...                                      _MED_PREF     
  4370.         Application                                    ALT+A   (Submenu APPLIC)
  4371.            Top                                         F2      (Procedure)   
  4372.            Bottom                                      F3      (Procedure)   
  4373.            Next                                        F4      (Procedure)   
  4374.            Prior                                       F5      (Procedure)   
  4375.            ------------                                        (Submenu )
  4376.            Add record                                          (Procedure)   
  4377.            Copy record                                         (Procedure)   
  4378.            Delete record                               CTRL+D  (Procedure)   
  4379.            ------------                                        (Submenu )
  4380.            Browse                                      CTRL+B  (Procedure)   
  4381.            Search...                                   CTRL+S  (Procedure)   
  4382.            Filter...                                   CTRL+F  (Procedure)   
  4383.            Order...                                    CTRL+O  (Procedure)   
  4384.            ------------                                        (Submenu )
  4385.            Query...                                    CTRL+Q  (Procedure)   
  4386.            Report...                                   CTRL+R  DO prtopts    
  4387.  
  4388.                                            72
  4389.  
  4390.  
  4391.  
  4392.  
  4393.  
  4394.  
  4395.  
  4396.         Utilities                                      ALT+U   (Submenu UTILITIES)
  4397.            Construct index                                     (Procedure)   
  4398.            Pack                                                (Procedure)   
  4399.            Environment                                         (Submenu ENVIRO)
  4400.               Status Bar                                       (Procedure)   
  4401.               Clock                                            (Procedure)   
  4402.               Extended video                                   (Procedure)   
  4403.               Sticky                                           (Procedure)   
  4404.  
  4405.  
  4406.  
  4407.  
  4408.  
  4409.  
  4410.  
  4411.  
  4412.  
  4413.  
  4414.  
  4415.  
  4416.  
  4417.  
  4418.  
  4419.  
  4420.  
  4421.  
  4422.  
  4423.  
  4424.  
  4425.  
  4426.  
  4427.  
  4428.  
  4429.  
  4430.  
  4431.  
  4432.  
  4433.  
  4434.  
  4435.  
  4436.  
  4437.  
  4438.  
  4439.  
  4440.  
  4441.  
  4442.  
  4443.  
  4444.  
  4445.  
  4446.  
  4447.  
  4448.  
  4449.                                            73
  4450.  
  4451.  
  4452.  
  4453.  
  4454.  
  4455.  
  4456.  
  4457.        System: ToDo -- To Do Management System
  4458.        Author: Walter J. Kennamer
  4459.        03/02/88   18:55:58
  4460.        Token Cross-Reference Report
  4461.  
  4462.        ------------------------------------------------------------------------
  4463.  
  4464.        622 tokens are included in this report.
  4465.  
  4466.  
  4467.        Legend for context symbols:
  4468.           (blank) reference does not change the variable or field value.
  4469.           = variable or field is changed in an assignment statement.
  4470.           x variable is released.
  4471.           A array is declared.
  4472.           G GET statement changes variable or field.
  4473.           P variable is declared PUBLIC.
  4474.           R field is replaced.
  4475.           U database is USEd
  4476.           V variable is declared PRIVATE.
  4477.           & variable is referenced in a macro--takes preference over all others.
  4478.           @ variable passed as a var parameter--Clipper only
  4479.           ? reference is of unknown type.
  4480.  
  4481.        ABBREV
  4482.           AREACODE.PRG     90   134   178
  4483.  
  4484.        ABORT
  4485.           TDINPUT.PRG      62x   67P  306=
  4486.           EDITSRCH.PRG     35=   69=   99=
  4487.           EDITCHGE.PRG     32=
  4488.  
  4489.        ACCESSES
  4490.           TODO.PRG        130
  4491.           TDEXIT.PRG       24
  4492.  
  4493.           .
  4494.           .
  4495.           .
  4496.  
  4497.        YESNO
  4498.           ADDRESS.PRG     476=  482G  482   484   663=  664   665=  668G  668      
  4499.                          748=  751G  751   753
  4500.  
  4501.        YR
  4502.           TDCOPY.PRG      109=  116=  116   122   126   128   224   226   241=     
  4503.                          248   255   262   264   277
  4504.  
  4505.        ZIP
  4506.           ADDRESS.PRG     130   227   282   301R  336R  363
  4507.           ADDRBOOK.PRG     85    86    88
  4508.           ROLODEX.PRG     180   181   183
  4509.  
  4510.                                            74
  4511.  
  4512.  
  4513.  
  4514.  
  4515.  
  4516.  
  4517.  
  4518.        System: ToDo -- To Do Management System
  4519.        Author: Walter J. Kennamer
  4520.        03/02/88   18:56:06
  4521.        Public Variable Summary
  4522.  
  4523.        ------------------------------------------------------------------------
  4524.  
  4525.  
  4526.        These variables were declared PUBLIC somewhere in the system.
  4527.        Some may also be used as private variables in some parts of the code.
  4528.  
  4529.        ABORT                                   ADDR_MROW
  4530.        ANSWER                                  CARD_ROWS
  4531.        CLIPPER                                 CMD_LINE
  4532.        C_OFFSET                                DATE_STR
  4533.            .
  4534.            .
  4535.            .
  4536.        S_TESTDATE                              S_VERSION
  4537.        T_COMP                                  T_DATED
  4538.        T_DUR                                   T_ITEM
  4539.        T_ITEMTYPE                              T_PRIOR
  4540.        T_SUBJ                                  T_TIME
  4541.  
  4542.  
  4543.  
  4544.  
  4545.  
  4546.  
  4547.  
  4548.  
  4549.  
  4550.  
  4551.  
  4552.  
  4553.  
  4554.  
  4555.  
  4556.  
  4557.  
  4558.  
  4559.  
  4560.  
  4561.  
  4562.  
  4563.  
  4564.  
  4565.  
  4566.  
  4567.  
  4568.  
  4569.  
  4570.  
  4571.                                            75
  4572.  
  4573.  
  4574.  
  4575.  
  4576.  
  4577.  
  4578.  
  4579.        System: ToDo -- To Do Management System
  4580.        Author: Walter J. Kennamer
  4581.        03/02/88   18:56:06
  4582.        Macro Summary
  4583.  
  4584.        ------------------------------------------------------------------------
  4585.  
  4586.  
  4587.           Macros Defined to SNAP!
  4588.           ----------------------------------------------------------------------
  4589.  
  4590.           Variable       Expansion
  4591.           -------------- ---------------------------------
  4592.  
  4593.           S_TDFILE        TODO
  4594.           S_DDNDX         TODODD
  4595.           S0_ADFNAME      ADDRESS
  4596.  
  4597.           ----------------------------------------------------------------------
  4598.           Macros Not Defined to SNAP!
  4599.           ----------------------------------------------------------------------
  4600.  
  4601.           &BAK_NAME                               &B_FILE
  4602.           &COLR_STR                               &FIELD1
  4603.           &FIELD2                                 &FIELD_NAME
  4604.           &FILT_STR                               &FLDNAME
  4605.           &FNAME                                  &IN_DB
  4606.           &IN_SELECT                              &IN_VAL
  4607.           &M_WORKAREA                             &NTXNAME
  4608.           &NUM                                    &PROGNAME
  4609.           &REP_FNAME                              &REV_COLR
  4610.           &S0_COLR1                               &S0_COLR2
  4611.           &S0_DATA                                &S0_PRMNAME
  4612.           &S0_PROGRAM                             &S0_USERFILT
  4613.           &SRCHFLD                                &TEMPIN
  4614.  
  4615.        ------------------------------------------------------------------------
  4616.        System: ToDo -- To Do Management System
  4617.        Author: Walter J. Kennamer
  4618.        03/02/88   18:56:06
  4619.        Array Summary
  4620.  
  4621.        ------------------------------------------------------------------------
  4622.        An array declared with a variable (e.g., DECLARE foo[bar])
  4623.        will be shown as having a size of [var].
  4624.  
  4625.        FIELD_LENGTH[var]
  4626.        FIELD_LIST[2]
  4627.  
  4628.  
  4629.  
  4630.  
  4631.  
  4632.                                            76
  4633.  
  4634.  
  4635.  
  4636.  
  4637.  
  4638.  
  4639.  
  4640.  
  4641.        System: ToDo -- To Do Management System
  4642.        Author: Walter J. Kennamer
  4643.        03/02/88   18:56:29
  4644.        File List
  4645.        ------------------------------------------------------------------------
  4646.  
  4647.        Programs and procedures:
  4648.          ADDRBOOK.PRG
  4649.          ADDRESS.PRG
  4650.          ADDRFILT()        (function  in ADDRESS.PRG)
  4651.          ADDRLIST.PRG
  4652.              .
  4653.              .
  4654.              .
  4655.          TIMEFORM()        (function  in TDCALDAY.PRG)
  4656.          TODO.PRG
  4657.          UNHIGHLIGHT       (procedure in SHOWCAL.PRG)
  4658.          VERPRT.PRG
  4659.  
  4660.        Procedure files:
  4661.          SUBJECT.PRG
  4662.          TODOPRC.PRG
  4663.  
  4664.        Databases:
  4665.             .
  4666.             .
  4667.             .
  4668.          HELP.DBF
  4669.          HELP.DBT
  4670.          SUBJECT.DBF
  4671.          TODO.DBF
  4672.  
  4673.        Index files:
  4674.          &NTXNAME
  4675.          DATEDUE.NDX
  4676.          DATEDUE.NTX
  4677.          HELPKEY.NTX
  4678.          HISTDD.NTX
  4679.          PRIORITY.NDX
  4680.          SUBJECT.NTX
  4681.          TODODD.NTX
  4682.  
  4683.        Report forms:
  4684.          SUBREPT.FRM
  4685.          TDDETIN.FRM
  4686.          TDSUMIN.FRM
  4687.  
  4688.        Memory files:
  4689.          ACCESSES.MEM
  4690.          CLIP.MEM
  4691.          DEFAULT.MEM
  4692.  
  4693.                                            77
  4694.  
  4695.  
  4696.  
  4697.  
  4698.  
  4699.  
  4700.  
  4701.  
  4702.  
  4703.                                    Index
  4704.  
  4705.      4PRINT  . . . . . . . . . . . . . . . . . . . . . . . . .  12, 13
  4706.      Abbreviations . . . . . . . . . . . . . . . . . . . . . . . .  10
  4707.      Acknowledgements  . . . . . . . . . . . . . . . . . . . . . .  53
  4708.      Action diagrams . . . . . . . . . . . 4, 8, 10, 13, 20, 37-41, 58
  4709.         User-defined symbols . . . . . . . . . . . . . . . . . . .  40
  4710.      Ashton-Tate . . . . . . . . . . . . . . . . . . . . . . . . 1, 51
  4711.      Association of Shareware Professionals  . . . . . . . . . . .  52
  4712.      Backup
  4713.         Importance of  . . . . . . . . . . . . . . . . . . . . . . . 7
  4714.      Batch operation . . . . . . . . . . . . . . . . . . . . . . .  43
  4715.      Blank lines, suppression of . . . . . . . . . . . . . . . . .  22
  4716.      Break Statements  . . . . . . . . . . . . . . . . . .  20, 40, 46
  4717.      Capitalization  . . . . . .  5, 10, 18, 21-23, 34, 35, 39, 48, 50
  4718.      Change history  . . . . . . . . . . . . . . . . . . . . . . .  47
  4719.      Clipper
  4720.         Index files  . . . . . . . . .  11, 29, 42, 57, 61, 62, 65, 77
  4721.      Command line switches
  4722.         /A -- Alternate CASE indenting . . . . . . . . . . . . . .  21
  4723.         /BW -- black and white . . . . . . . . . . . . . . . . . .  46
  4724.         /F -- Configuration file name  . . . . . . . . . . . . . . . 9
  4725.         /M -- macro file name  . . . . . . . . . . . . . . . . . .  14
  4726.         /O -- omit macros  . . . . . . . . . . . . . . . . . . . .  14
  4727.         /P -- Printer port or filename . . . . . . . . . . . . . .  42
  4728.         /S -- Echo reports to screen . . . . . . . . . . . . . . .  26
  4729.         /T -- SNAP! tag (changing *#)  . . . . . . . . . . . . . .  14
  4730.         /X -- immediate mode (batch) . . . . . . . . . . . . . . .  43
  4731.      Comments
  4732.         Putting them back in, design difficulties surrounding  . .  23
  4733.         Suppression of . . . . . . . . . . . . . . . . . . . . . .  22
  4734.      Compuserve  . . . . . . . . . . . . . . . . . . . . .  47, 51, 52
  4735.      CONFIG.SNP  . . . . . . . . . . . . . . . . . . . . . . . . 9, 43
  4736.      Configuration file  . . . . . . . . . . . . . . . . 9, 10, 40, 43
  4737.         CONFIG.SNP . . . . . . . . . . . . . . . . . . . . . . . 9, 43
  4738.         Retrieving configuration settings  . . . . . . . . . . . .  10
  4739.         Saving configuration settings  . . . . . . . . . . . . . .  10
  4740.      Continuation lines  . . . . . . . . . . . . . . . . . . . . .  47
  4741.      Control structure . . . . . . . . . . . . . .  20, 38, 40, 45, 49
  4742.      Cross-reference . 4, 5, 8, 10, 17, 18, 23, 26, 32-35, 40, 46, 50,
  4743.                                                                 58, 74
  4744.         Key words  . . . . . . . . . . . . . . . . . . . . . .  23, 33
  4745.         Legend . . . . . . . . . . . . . . . . . . . . . . . . . .  32
  4746.         Limitation of type flagging  . . . . . . . . . . . . . . .  33
  4747.         Limiting to PUBLIC variables . . . . . . . . . . . . . . .  35
  4748.         Numeric constants  . . . . . . . . . . . . . . . . . . . .  32
  4749.         Quoted strings excluded from . . . . . . . . . . . . . . .  32
  4750.         What is included . . . . . . . . . . . . . . . . . . . . .  32
  4751.      Database summary  . . . . . . . . . . . . .  4, 26, 28-30, 50, 63
  4752.      dBASE II  . . . . . . . . . . . . . . 1, 5, 7, 11, 24, 29, 30, 32
  4753.  
  4754.                                      78
  4755.  
  4756.  
  4757.  
  4758.  
  4759.  
  4760.  
  4761.  
  4762.      dBASE III . . . . . . . . . .  1, 5, 8, 11, 24, 29-31, 34, 35, 50
  4763.      dBASE IV  . . . . . . . . . . . . 1, 5, 8, 11, 24, 28, 31, 35, 48
  4764.      DBXL  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
  4765.      DBxWORDS.SNP  . . . . . . . . . . . . . . . . . . . . . .  21, 35
  4766.         DB2WORDS.SNP . . . . . . . . . . . . . . . . . . . . . . 7, 24
  4767.         DB3WORDS.SNP . . . . . . . . . . . . . . . . . . 8, 23, 24, 34
  4768.         DB4WORDS.SNP . . . . . . . . . . . . . . . . . . . . 8, 24, 49
  4769.      Documentation files
  4770.         Printing . . . . . . . . . . . . . . . . . . . . . . . . .  12
  4771.      Elapsed time  . . . . . . . . . . . . . . . . . . . . . . . .  10
  4772.      errors  . . . . . . . . . . . . . . . . .  11, 20, 38, 43, 46, 58
  4773.         ERROR.DOC  . . . . . . . . . . . . . . . . . . . . . .  11, 58
  4774.      Field names . . . . . . . . . . . . . . . . . . . . 21, 32, 61-63
  4775.      Format files  . . . . . 4, 10, 11, 15, 17, 19, 27, 30, 37, 57, 58
  4776.      Format screen . . . . . . . . . . . . . . .  8, 20-22, 24, 38, 40
  4777.      FoxBASE . . . . . . . . . . .  1, 5, 7, 8, 11, 24, 29, 30, 35, 50
  4778.         Index files  . . . . . . . . . . . . . . . . . . .  11, 29, 42
  4779.      FoxPro  . .  1, 4, 5, 8, 9, 11, 15-17, 24, 29, 31, 35, 45, 48, 70
  4780.      Functions
  4781.         Capitalization of function names . . . . . . . . . . .  23, 34
  4782.      Indentation . . . . . . . . . . . . . . 5, 10, 17, 18, 20, 21, 50
  4783.         Alternate CASE indenting . . . . . . . . . . . . . . . . .  21
  4784.      Index file  . . . 4, 11, 19, 28-30, 37, 48, 57, 61, 62, 65-67, 77
  4785.         NDX extensions . . . . . .  29, 30, 42, 50, 57, 62, 65, 66, 77
  4786.      Input . . . . . . . . . . . . . . . . . . . 9, 11, 19, 32, 40, 43
  4787.      Key words . . . . . . . . . . 7, 8, 10, 18, 21-24, 32, 34, 38, 45
  4788.         Capitalization . . . . .  5, 10, 18, 21-23, 34, 35, 39, 48, 50
  4789.         Cross-referencing of . . . . . . . . . . . . . . . . .  23, 32
  4790.         DBxWORDS.SNP . . . . . . . . . .  7, 8, 21, 23, 24, 34, 35, 49
  4791.         Duplicates . . . . . . . . . . . . . . . . . . . . . . . .  24
  4792.         Expansion or compression . . . . . . . . . . . . . . . . .  22
  4793.         Including other files  . . . . . . . . . . . . . . . . . .  24
  4794.         PERSONAL.KEY . . . . . . . . . . . . . . . . . . . . .  24, 49
  4795.         Peverse use of, punishment for . . . . . . . . . . . . . .  10
  4796.         Special characters in file . . . . . . . . . . . . . . . .  23
  4797.      Korenthal Associates  . . . . . . . . . . . . . . . . . .  12, 13
  4798.      Label forms . . . . . . . . . . . . . . 11, 17, 19, 26-28, 50, 57
  4799.      License agreement . . . . . . . . . . . . . . . . . . . . . . . 1
  4800.      Limitations . . . . . . . . . . . . . . . . . . . . . . . . .  45
  4801.      Link  . . . . . . . . . . . . . . . . . . . . . . . 4, 35, 36, 50
  4802.         LINK.SNP . . . . . . . . . . . . . . . . . . . . . . . . .  35
  4803.         PLINK86  . . . . . . . . . . . . . . . . . . . . . . 4, 35, 50
  4804.      MACRO.SNP . . . . . . . . . . . . . . . . . . . . . . . . . .  14
  4805.      Macros  . . . 5, 9, 14-17, 19, 28, 33, 37, 43, 50, 66, 72, 74, 76
  4806.         SNAPMACRO  . . . . . . . . . . . . . . . . . . . . . .  14, 20
  4807.      Make
  4808.         Make files . .  4, 5, 7, 8, 11, 19, 20, 22, 35, 36, 45, 50, 52
  4809.         MAKE.INI . . . . . . . . . . . . . . . . . . . . . . . . .  36
  4810.         MAKEFILE . . . . . . . . . . . . . . . . . . . . . . .  36, 58
  4811.         NDMAKE . . . . . . . . . . . . . . . . . . . . . . . . . .  36
  4812.      Memory files  .  4, 9, 11, 15, 17, 19, 26, 27, 31, 37, 55, 58, 77
  4813.      Memory requirements . . . . . . . . . . . . . . . . . . . . .  45
  4814.  
  4815.                                      79
  4816.  
  4817.  
  4818.  
  4819.  
  4820.  
  4821.  
  4822.  
  4823.      Nantucket . . . . . . . . . . . . . . . . . . . . . . . . . 1, 51
  4824.      Narratives  . . . . . . . . . . . . . . . . . . . . . . . . .  48
  4825.      NDMAKE  . . . . . . . . . . . . . . . . . . . . . . . . . . .  36
  4826.      Other screen  . . . . . . . . . . . . . . . . . . . . . . . .  11
  4827.      Output  4, 7-9, 12, 19, 22, 23, 34, 36, 37, 39, 42, 47, 48, 50, 54
  4828.      Paths . . . . . . . . . . . . . . . . 7-9, 11, 12, 15, 37, 45, 47
  4829.      PERSONAL.KEY  . . . . . . . . . . . . . . . . . . . . . .  24, 49
  4830.      PLINK86 . . . . . . . . . . . . . . . . . . . . . . . . 4, 35, 50
  4831.         LINK.SNP . . . . . . . . . . . . . . . . . . . . . . . . .  35
  4832.      Print screen  . . . . . . . . . . . . . . . . . . . . . . . .  42
  4833.         HP LaserJet II setup string  . . . . . . . . . . . . . . .  41
  4834.      Printer configuration file  . . . . . . . . . . . . . . . . .  26
  4835.      Printing documentation  . . . . . . . . . . . . . . . . . . .  12
  4836.         4PRINT . . . . . . . . . . . . . . . . . . . . . . . . . .  12
  4837.         Norton Utilities LP Program  . . . . . . . . . . . . . . .  12
  4838.         Reprinting . . . . . . . . . . . . . . . . . . . .  13, 42, 49
  4839.      PRIVATE variables . . . . . . . . . . . . . . . .  33, 35, 74, 75
  4840.      Procedure files
  4841.         Unique name requirement  . . . . . . . . . . . . . . . . .  46
  4842.      ProClip . . . . . . . . . . . . . . . . . . . . . . . . . . .  24
  4843.      Program narratives  . . . . . . . . . . . . . . . . . . . . .  48
  4844.      PUBLIC variables  . . . . . .  18, 32, 33, 35, 50, 53, 55, 74, 75
  4845.      Quicksilver . . . . . . . . . . . . . . . . . . . . . . . . 5, 11
  4846.      Recursion (see Recursion) . . . . . . . . . . . . . . . . . .  27
  4847.      Registration Fee  . . . . . . . . . . . . . . . . . . . . . . . 6
  4848.      Report forms  . 4, 10, 11, 17, 19, 26-28, 31, 37, 57, 58, 61, 62,
  4849.                                                                 68, 77
  4850.      Rettig, Tom . . . . . . . . . . . . . . . . . . .  18, 22, 24, 34
  4851.      SNAP FORMAT . . . . . . . . . . . . . . . . . . . . . . . . .  18
  4852.      SNAP XREF . . . . . . . . . . . . . . . . . . . . . . . . . .  18
  4853.      SNAP.DOC  . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
  4854.      SNAP.EXE  . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
  4855.      SNAP.HLP  . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
  4856.      SNAP! directives
  4857.         Changing *#  . . . . . . . . . . . . . . . . . . . . . . .  14
  4858.         DATAPATH . . . . . . . . . . . . . . . . . . . . . . . . .  17
  4859.         FORMAT . . . . . . . . . . . . . . . . . . . . . . . . . .  18
  4860.         FORMFEED . . . . . . . . . . . . . . . . . . . . . . . . .  41
  4861.         PRGPATH  . . . . . . . . . . . . . . . . . . . . . . . . .  17
  4862.         SNAPCODE . . . . . . . . . . . . . . . . . . . . . . 15-18, 29
  4863.         SNAPMACRO  . . . . . . . . . . . . . . . . . 14-16, 18, 28, 55
  4864.         XREF . . . . . . . . . . . . . . . . . . . . . . . . . . .  18
  4865.      SNAPMACRO . . . . . . . . . . . . . . . . . . . . . . . .  14, 20
  4866.      Source code printout  . . . . . . . . . . . . . . . . . . . .  40
  4867.         Alternatives to SNAP!  . . . . . . . . . . . . . . . . . .  12
  4868.         Directing to a file or another port  . . . . . . . . . . .  42
  4869.         Forcing page breaks  . . . . . . . . . . . . . . . . . . .  41
  4870.         Network printing considerations  . . . . . . . . . . . . .  42
  4871.         Printing without documenting . . . . . . . . . . . . . . .  42
  4872.         What files are not printed . . . . . . . . . . . . . . . .  42
  4873.      Support, how to get . . . . . . . . . . . . . . . . . . . . .  51
  4874.      System screen . . . . . . . . . . . . . . . . . . . 7, 10, 15, 17
  4875.  
  4876.                                      80
  4877.  
  4878.  
  4879.  
  4880.  
  4881.  
  4882.  
  4883.  
  4884.      Tabs  . . . . . . . . . . . . . . . . . . . . . .  10, 20, 40, 41
  4885.         Spaces instead of  . . . . . . . . . . . . . . . . . . . .  20
  4886.      TLINK . . . . . . . . . . . . . . . . . . . . . . . . . 4, 35, 50
  4887.      TopFile . . . . . . . . . . . . . . . 7-9, 11, 14, 31, 36, 44, 47
  4888.         Explanation of . . . . . . . . . . . . . . . . . . . . . . . 7
  4889.      Tree screen . . . . . . . . . . . . . . . . . . . . . . . . .  27
  4890.      Turbo Linker  . . . . . . . . . . . . . . . . . . . . . 4, 35, 50
  4891.      Turbo Pascal  . . . . . . . . . . . . . . . . . . . . . . . .  49
  4892.      Updates, how to get . . . . . . . . . . . . . . . . . . . . .  51
  4893.      Version Numbers . . . . . . . . . . . . . . . . . . . . . . .  51
  4894.  
  4895.  
  4896.  
  4897.  
  4898.  
  4899.  
  4900.  
  4901.  
  4902.  
  4903.  
  4904.  
  4905.  
  4906.  
  4907.  
  4908.  
  4909.  
  4910.  
  4911.  
  4912.  
  4913.  
  4914.  
  4915.  
  4916.  
  4917.  
  4918.  
  4919.  
  4920.  
  4921.  
  4922.  
  4923.  
  4924.  
  4925.  
  4926.  
  4927.  
  4928.  
  4929.  
  4930.  
  4931.  
  4932.  
  4933.  
  4934.  
  4935.  
  4936.  
  4937.                                      81
  4938.